【发布时间】:2022-04-18 19:29:45
【问题描述】:
Laravel 有几个内置的断言允许你从请求中查询响应。
public function testWebpage()
{
$response = $this->get('/important-page')
->assertStatus(200)
->assertViewIs('page')
->assertSee('This is a page')
->assertSee('login');
}
这很好,除非assertSee 失败,它会转储一个标准的 PHPUnit 错误——类似于...
1) Tests\PageTest::testWebpage
Failed asserting that '<!DOCTYPE html>\n
<!--[if IE 8]><html class="ie8" lang=""><![endif]-->\n
<!--[if IE 9]><html class="ie9" lang=""><![endif]-->\n
<html lang="en">\n
<!--<![endif]-->\n
<!-- start: HEAD -->\n
<head>\n
...
[Insert 500 lines of HTML here]
...
</body>\n
</html>\n
' contains "This is a page".
是否有合理的解决方案来输出失败的文本以使其有用?我可以指定一个粗略的上下文(可能是div#welcome)来区分而不是整个文件吗?我可以选择输出到文件以在控制台之外进行检查吗?我可以获得某种可折叠的输出吗?我可以捕获 PHPUnit 失败的断言并将输出修剪为 20 行吗?
这不仅破坏了调试这一测试的便利性——如果assertSee() 还产生另外 20 个错误,则难以定位其他故障。
【问题讨论】:
标签: laravel unit-testing phpunit