我有一些代码,可以使用
php
cli 和 phpunit
通过普通文件运行。
令我困惑的是,代码在执行过程中应该抛出警告,但在 PHPUnit 中却从未抛出警告。
这是使用
php run.php
运行时会抛出警告的代码:
<?php
error_reporting(E_ALL);
include 'vendor/autoload.php';
$html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
a:active {
font-size: 11px;
}
</style>
</head>
<body>
<a href="google.com">blah</a>
</body>
</html>';
$htmldoc = new InlineStyle\InlineStyle($html);
$htmldoc->applyStylesheet($htmldoc->extractStylesheets()); //Causes a warning
echo($htmldoc->getHTML());
警告:
Warning: array_map(): An error occurred while invoking the map callback in /work/inlinecss-test/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Translator.php
无论我通过
php-fpm
还是php
运行文件,都会抛出警告。
但是,如果我将代码放入 PHPUnit 测试用例并运行它,则不会抛出警告:
<?php
use InlineStyle\InlineStyle;
class InlineStyleTest extends \PHPUnit_Framework_TestCase
{
public function testActivePseudoSelectors(){
error_reporting(E_ALL);
$html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
a:active {
font-size: 11px;
}
</style>
</head>
<body>
<a href="google.com">blah</a>
</body>
</html>';
$htmldoc = new InlineStyle($html);
$styles = $htmldoc->extractStylesheets();
$htmldoc->applyStylesheet($styles);
echo($htmldoc->getHTML());
}
}
在这种情况下,测试正常,没有抛出任何警告:
OK (1 test, 0 assertions)
这是我的
phpunit.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
bootstrap="vendor/autoload.php"
>
<testsuites>
<testsuite name="tests">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
造成这种差异的原因是什么?
代码在此存储库中:https://github.com/F21/inlinecss-test
上面运行的结果在travis-ci上:https://travis-ci.org/F21/inlinecss-test/jobs/17397488
PHPUnit 将错误/警告/通知转换为异常,以便它们可以显示在测试结果中。