|
10 | 10 | use PHPUnit\Event\TestRunner\FinishedSubscriber;
|
11 | 11 | use PHPUnit\Metadata\DataProvider;
|
12 | 12 | use PHPUnit\TestRunner\TestResult\Facade;
|
| 13 | +use PHPUnit\TestRunner\TestResult\TestResult; |
13 | 14 | use TomasVotruba\PHPUnitJsonResultPrinter\Printer\SimplePrinter;
|
14 | 15 |
|
15 | 16 | final class TestRunnerFinishedSubscriber implements FinishedSubscriber
|
@@ -39,28 +40,7 @@ public function notify(Finished $event): void
|
39 | 40 | ],
|
40 | 41 | ];
|
41 | 42 |
|
42 |
| - $resultJsonData['failed'] = []; |
43 |
| - |
44 |
| - // print failed tests |
45 |
| - foreach ($testResult->testFailedEvents() as $testFailedEvent) { |
46 |
| - /** @var Failed $testFailedEvent */ |
47 |
| - $testMethod = $testFailedEvent->test(); |
48 |
| - |
49 |
| - /** @var TestMethod $testMethod */ |
50 |
| - $failedEventData = [ |
51 |
| - 'test_class' => $testMethod->className(), |
52 |
| - 'test_method' => $testMethod->methodName(), |
53 |
| - 'message' => $testFailedEvent->throwable()->message(), |
54 |
| - 'exception_class' => $testFailedEvent->throwable()->className(), |
55 |
| - 'line' => $this->resolveLineNumber($testFailedEvent->throwable()->stackTrace()), |
56 |
| - ]; |
57 |
| - |
58 |
| - if ($testMethod->testData()->hasDataFromDataProvider()) { |
59 |
| - $failedEventData['data_provider'] = $this->createDataProviderData($testMethod); |
60 |
| - } |
61 |
| - |
62 |
| - $resultJsonData['failed'][] = $failedEventData; |
63 |
| - } |
| 43 | + $resultJsonData['failed'] = $this->createFailedEventDatas($testResult); |
64 | 44 |
|
65 | 45 | $resultJson = json_encode($resultJsonData, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR);
|
66 | 46 | $this->simplePrinter->writeln($resultJson);
|
@@ -92,4 +72,34 @@ private function resolveLineNumber(string $stackTrace): int
|
92 | 72 | preg_match('#:(?<line>\d+)$#', $stackTrace, $matches);
|
93 | 73 | return (int) $matches['line'];
|
94 | 74 | }
|
| 75 | + |
| 76 | + /** |
| 77 | + * @return Failed[] |
| 78 | + */ |
| 79 | + private function createFailedEventDatas(TestResult $testResult): array |
| 80 | + { |
| 81 | + $failedEventDatas = []; |
| 82 | + |
| 83 | + foreach ($testResult->testFailedEvents() as $testFailedEvent) { |
| 84 | + /** @var Failed $testFailedEvent */ |
| 85 | + $testMethod = $testFailedEvent->test(); |
| 86 | + |
| 87 | + /** @var TestMethod $testMethod */ |
| 88 | + $failedEventData = [ |
| 89 | + 'test_class' => $testMethod->className(), |
| 90 | + 'test_method' => $testMethod->methodName(), |
| 91 | + 'message' => $testFailedEvent->throwable()->message(), |
| 92 | + 'exception_class' => $testFailedEvent->throwable()->className(), |
| 93 | + 'line' => $this->resolveLineNumber($testFailedEvent->throwable()->stackTrace()), |
| 94 | + ]; |
| 95 | + |
| 96 | + if ($testMethod->testData()->hasDataFromDataProvider()) { |
| 97 | + $failedEventData['data_provider'] = $this->createDataProviderData($testMethod); |
| 98 | + } |
| 99 | + |
| 100 | + $failedEventDatas[] = $failedEventData; |
| 101 | + } |
| 102 | + |
| 103 | + return $failedEventDatas; |
| 104 | + } |
95 | 105 | }
|
0 commit comments