PHPUnit代码覆盖会话已经开始

时间:2017-06-18 00:00:56

标签: php html unit-testing session phpunit

我有PHP v7.0.15 PHPUnit v6.0.7。单独运行命令phpunit就可以完成我的所有测试。

现在我想获得有关代码覆盖率的信息,因此我创建了一个名为phpcoverage的目录,并运行了phpunit --coverage-html phpcoverage命令。这会输出错误:

session_start(): Cannot send session cookie - headers already sent by (output started at phar:///usr/local/bin/phpunit/phpunit/Util/Printer.php:114)

我在另一个答案中读到我应该在我的测试中调用@session_start(),所以我将其添加为第一行,现在得到错误:

A session had already been started - ignoring session_start()

我的phpunit.xml文件如下所示:

<phpunit bootstrap="public_html/app/vendor/autoload.php"
  colors="true"
  convertErrorsToExceptions="true"
  convertNoticesToExceptions="true"
  convertWarningsToExceptions="true"
  processIsolation="false"
  stopOnFailure="false"
  syntaxCheck="true">

  <testsuites>
      <testsuite name="App Tests">
          <directory>tests</directory>
      </testsuite>
  </testsuites>

  <filter>
    <whitelist processUncoveredFilesFromWhitelist="true">
      <directory suffix=".php">public_html/app/library</directory>
    </whitelist>
  </filter>
</phpunit>

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您在代码中的一个页面中多次调用session_start()。您可以在测试用例中的session_start()之前检查会话状态。请参阅Check if PHP session has already started

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}