Merge pull request #1080 from nuernbergerA/test-junit

[2.x] Add test for junit implementation
This commit is contained in:
Nuno Maduro
2024-01-28 23:49:06 +00:00
committed by GitHub
2 changed files with 84 additions and 1 deletions

View File

@ -1379,6 +1379,10 @@
PASS Tests\Visual\Help PASS Tests\Visual\Help
✓ visual snapshot of help command output ✓ visual snapshot of help command output
PASS Tests\Visual\JUnit
✓ junit output
✓ junit with parallel
PASS Tests\Visual\Parallel PASS Tests\Visual\Parallel
✓ parallel ✓ parallel
✓ a parallel test can extend another test with same name ✓ a parallel test can extend another test with same name
@ -1404,4 +1408,4 @@
WARN Tests\Visual\Version WARN Tests\Visual\Version
- visual snapshot of help command output - visual snapshot of help command output
Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 20 skipped, 999 passed (2359 assertions) Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 20 skipped, 1001 passed (2387 assertions)

79
tests/Visual/JUnit.php Normal file
View File

@ -0,0 +1,79 @@
<?php
use Symfony\Component\Process\Process;
$run = function () {
$junitLogFile = tempnam(sys_get_temp_dir(), 'junit');
$process = new Process(
array_merge(['php', 'bin/pest', '--log-junit', $junitLogFile], func_get_args()),
dirname(__DIR__, 2),
['COLLISION_PRINTER' => 'DefaultPrinter', 'COLLISION_IGNORE_DURATION' => 'true'],
);
$process->run();
$rawXmlContent = file_get_contents($junitLogFile);
unlink($junitLogFile);
// convert xml to array
try {
$xml = new SimpleXMLElement(preg_replace("/(<\/?)(\w+):([^>]*>)/", '$1$2$3', $rawXmlContent));
return json_decode(json_encode((array) $xml), true);
} catch (Exception $exception) {
throw new XmlParseException($exception->getMessage(), $exception->getCode(), $exception->getPrevious());
}
};
$normalizedPath = function (string $path) {
return str_replace('/', DIRECTORY_SEPARATOR, $path);
};
test('junit output', function () use ($normalizedPath, $run) {
$result = $run('tests/.tests/SuccessOnly.php');
expect($result['testsuite']['@attributes'])
->name->toBe('Tests\tests\SuccessOnly')
->file->toBe($normalizedPath('tests/.tests/SuccessOnly.php'))
->tests->toBe('2')
->assertions->toBe('2')
->errors->toBe('0')
->failures->toBe('0')
->skipped->toBe('0');
expect($result['testsuite']['testcase'])
->toHaveCount(2);
expect($result['testsuite']['testcase'][0]['@attributes'])
->name->toBe('it can pass with comparison')
->file->toBe($normalizedPath('tests/.tests/SuccessOnly.php::it can pass with comparison'))
->class->toBe('Tests\tests\SuccessOnly')
->classname->toBe('Tests.tests.SuccessOnly')
->assertions->toBe('1')
->time->toStartWith('0.0');
});
test('junit with parallel', function () use ($normalizedPath, $run) {
$result = $run('tests/.tests/SuccessOnly.php', '--parallel', '--processes=1', '--filter', 'can pass with comparison');
expect($result['testsuite']['@attributes'])
->name->toBe('Tests\tests\SuccessOnly')
->file->toBe($normalizedPath('tests/.tests/SuccessOnly.php'))
->tests->toBe('1')
->assertions->toBe('1')
->errors->toBe('0')
->failures->toBe('0')
->skipped->toBe('0');
expect($result['testsuite']['testcase'])
->toHaveCount(1);
expect($result['testsuite']['testcase']['@attributes'])
->name->toBe('it can pass with comparison')
->file->toBe($normalizedPath('tests/.tests/SuccessOnly.php::it can pass with comparison'))
->class->toBe('Tests\tests\SuccessOnly')
->classname->toBe('Tests.tests.SuccessOnly')
->assertions->toBe('1')
->time->toStartWith('0.0');
});