无法使用 PHPUnit 对 vagrant box 执行任何测试
Can't execute any test on vagrant box using PHPUnit
我在一家公司工作。我知道如何 运行 在 vag运行t 框上进行 PHPUnit 测试。但我不知道为什么我不能 运行 对他们使用 chef 配置的 vag运行t 盒子进行任何测试。每当我执行 运行ning PHPUnit
命令时,我都会遇到以下错误:
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
任何帮助都将不胜感激。
你的测试 运行ning 很好。在您的示例测试中,您调用了 visit('en/contact')
。它试图访问 url,但它得到的不是 200,而是 404。您看到的显示是您尝试访问 url.
的测试结果。
问题是您在 app/Http/Middleware/SetCookieData.php
中的代码试图修改 headers(使用 header()
函数),但是 PHPUnit 已经将输出写入标准输出。因此,PHP 抛出一个错误,表明您在写入输出后试图修改 headers。
这个问题已经有几个答案[1][2][3],但在这里总结一下:
运行 PHP带有 --stderr
选项的单元(或将 stderr="true"
添加到您的 phpunit.xml
)。这样,PHPUnit 将写入 STDERR,因此 PHP 不会抱怨已经写入 STDOUT。这可能是最简单的选择。
正在尝试使用 @runInSeparateProcess
注释进行测试。但是,由于框架的复杂性,您可能 运行 遇到问题。此外,您可能会有很多测试需要此注释,这将是资源密集型的。
/**
* @runInSeparateProcess
*/
public function testBasicExample()
{
// visit('en/contact');
}
运行 PHP带有 --process-isolation
标志的单位(或将 processIsolation="true"
添加到您的 phpunit.xml
)。可能与 @runInSeparateProcess
注释相同的问题。
模拟 built-in header()
函数不实际发送 headers。不过,这可能会改变您的页面的反应方式,因此您最终可能不得不编写更多测试代码。
参考文献:
我在一家公司工作。我知道如何 运行 在 vag运行t 框上进行 PHPUnit 测试。但我不知道为什么我不能 运行 对他们使用 chef 配置的 vag运行t 盒子进行任何测试。每当我执行 运行ning PHPUnit
命令时,我都会遇到以下错误:
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
任何帮助都将不胜感激。
你的测试 运行ning 很好。在您的示例测试中,您调用了 visit('en/contact')
。它试图访问 url,但它得到的不是 200,而是 404。您看到的显示是您尝试访问 url.
问题是您在 app/Http/Middleware/SetCookieData.php
中的代码试图修改 headers(使用 header()
函数),但是 PHPUnit 已经将输出写入标准输出。因此,PHP 抛出一个错误,表明您在写入输出后试图修改 headers。
这个问题已经有几个答案[1][2][3],但在这里总结一下:
运行 PHP带有
--stderr
选项的单元(或将stderr="true"
添加到您的phpunit.xml
)。这样,PHPUnit 将写入 STDERR,因此 PHP 不会抱怨已经写入 STDOUT。这可能是最简单的选择。正在尝试使用
@runInSeparateProcess
注释进行测试。但是,由于框架的复杂性,您可能 运行 遇到问题。此外,您可能会有很多测试需要此注释,这将是资源密集型的。/** * @runInSeparateProcess */ public function testBasicExample() { // visit('en/contact'); }
运行 PHP带有
--process-isolation
标志的单位(或将processIsolation="true"
添加到您的phpunit.xml
)。可能与@runInSeparateProcess
注释相同的问题。模拟 built-in
header()
函数不实际发送 headers。不过,这可能会改变您的页面的反应方式,因此您最终可能不得不编写更多测试代码。
参考文献: