dqq9695 2016-03-25 22:55
浏览 50
已采纳

无法使用PHPUnit对vagrant box执行任何测试

I am working for a company. I know how to ran PHPUnit tests on vagrant box. But I don't know why i can't run any test on their vagrant box configured using chef. Whenever i am running PHPUnit command, i am getting below error:

There was 1 failure:

1) ExampleTest::testBasicExample
A request to [en/contact] failed. Received status code [404].

/..../vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:178
/..../vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:72
/..../vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:53
/..../tests/ExampleTest.php:16

Caused by
ErrorException: Cannot modify header information - headers already sent by (output started at /..../vendor/phpunit/phpunit/src/Util/Printer.php:133) in /..../app/Http/Middleware/SetCookieData.php:17

Any help will be very much appreciable.

  • 写回答

1条回答 默认 最新

  • dongzhonggua4229 2016-03-26 06:45
    关注

    Your test is running just fine. In your example test, you made a call to visit('en/contact'). It attempted to visit that url, but instead of a 200, it got a 404. The display you are seeing is the result of your test attempting to visit that url.

    The problem is that your code in app/Http/Middleware/SetCookieData.php is attempting to modify the headers (using the header() function), but PHPUnit has already written output to STDOUT. So, PHP is throwing an error that you're attempting to modify headers after writing output.

    There are a couple answers[1][2][3] for this issue already, but to summarize here:

    1. Run PHPUnit with the --stderr option (or add stderr="true" to your phpunit.xml). This way, PHPUnit will write to STDERR, so PHP won't complain about having already written to STDOUT. This is probably the easiest option.

    2. Trying using the @runInSeparateProcess annotation for your test. Though, you may run into issues because of the complexity of the framework. Additionally, you will probably have many tests that need this annotation, and that will be resource intensive.

      /**
       * @runInSeparateProcess
       */
      public function testBasicExample()
      {
          // visit('en/contact');
      }
      
    3. Run PHPUnit with the --process-isolation flag (or add processIsolation="true" to your phpunit.xml). Likely same issues as the @runInSeparateProcess annotation.

    4. Mock the built-in header() function to not actually send headers. Though, this may change how your pages react, so you will probably end up having to write more testing code.

    References:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站