为什么使用 php-cli 运行一段代码时会抛出警告,但使用 PHPUnit 运行完全相同的代码时不会抛出警告?

问题描述 投票:0回答:1

我有一些代码,可以使用

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

php phpunit warnings
1个回答
-1
投票

PHPUnit 将错误/警告/通知转换为异常,以便它们可以显示在测试结果中。

PHPUnit 文档

© www.soinside.com 2019 - 2024. All rights reserved.