我有一些代碼,我通過使用php
cli和phpunit
的正常文件運行。爲什麼使用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
上面運行的結果是特拉維斯-CI:https://travis-ci.org/F21/inlinecss-test/jobs/17397488
我相信PHPUnit的強制所有的警告被關閉,所以他們只能在日誌中。 –
@StevenScott在我的配置中,我已經設置了它,使'convertWarningsToExceptions = true'。嗯。 – F21
這可能是由於您如何嘗試運行它。 PHPUnit使用自己的內部邏輯和Globals的處理,也許這會停止error_reporting(),但我認爲你應該看到基於你的引導的異常。也許在測試文件中嘗試一些簡單的代碼(require/include)? –