【发布时间】:2014-08-15 20:12:55
【问题描述】:
我在尝试在 phpunit 测试中测试简单的 Illuminate\Http\Response 对象时遇到问题。有问题的错误是:
PHPUnit 4.3-dev by Sebastian Bergmann.
Configuration read from /var/MyApp/phpunit.xml
....................R.................
Time: 2.71 seconds, Memory: 76.75Mb
OK, but incomplete, skipped, or risky tests!
Tests: 38, Assertions: 55, Risky: 1.
phpunit --tap as 运行时显示 R 的位置
# RISKY Test code or tested code did not (only) close its own output buffers
我要测试的类是:
class PrettyError {
/**
* Renders a pretty 500 error page view
*
* @return string with error view
*/
public function render()
{
return Response::make(View::make('viewName')->with('param','value')->render(), 500, array());
}
}
测试是
class Pretty500Test extends BaseTest {
/** @var Pretty500 */
private $pretty500;
/**
* Set dependencies
*/
public function __construct()
{
$this->pretty500 = app(PrettyError::class);
}
public function testRender()
{
$response = $this->pretty500->render();
//assertions below, never get reached cause tests aborts after above call
$this->assertsTrue('500',$response->getStatus());
}
}
请注意,使用 laravel 在我的应用程序中测试任何路线时都会发生相同的错误
this->route('GET','routeName')
helper 方法,所以这似乎是与响应请求相关的一般错误。据我所知,我的应用程序中没有任何东西在输出缓冲(有目的地)做任何时髦的事情,这是我能想到的唯一可能会破坏 Response 类的标准工作的事情。
我正在使用 phpunit 4.3-dev、laravel 4.2.1 和 mocky 进行测试。
就这个特别危险的错误代码而言,我在互联网上根本没有找到太多信息,所以如果没有进一步的帮助,我会不知所措。
【问题讨论】:
-
在全新安装的 Laravel 上尝试一下 - 你仍然遇到问题吗?
-
不,我还没有尝试过全新安装,接下来我会这样做,以确保它不在我正在使用的 TestCase 设置中
-
更新:我将问题隔离了一点,它与 Request 类本身无关,而是与内部 View 调用有关,所以基本上
View::make('viewName')->with('param','value')->render()触发了 phpunit 风险警告,没有任何其他内容测试。由于我的应用程序中的View实例不是本机 laravel 实例,而是使用自定义实例进行热交换,但建立在此之上(它注册了一些有用的 View 作曲家),也许其中有一些测试不喜欢的东西 -
实际上 - 我刚刚注意到您正在“制作”一个视图,渲染它,然后将其发送到 Response 类以重新渲染?
-
是的,基本上我正在创建一个带有自定义标题和状态代码的响应,它的内容只是呈现的视图。我现在看了一下文档,有一个速记方法
Response::view('hello')->header('Content-Type', $type);可以立即使用它,但除此之外它是正确的 AFAIK