这是单元测试还是其他测试?使用Laravel 8



我最近构建了一个应用程序,可以将大约4500行Excel数据导入MongoDB数据库。我的导入工作得很好,但现在我遇到了GIGO问题。

excel电子表格有一个名为"program_url"的列,该列应该是一个外部链接。其中大约有一千个畸形或导致404。我已经设法在导入过程中修复了格式错误的url(http://www.typt-things(,但有相当多的URL只会导致404页面,我想测试一下。

我的问题是,在运行导入时测试HTTP200状态更好吗?还是应该是单元/功能/浏览器测试的一部分?如果后者。。我该怎么做呢?

在黄昏测试中,我有以下代码作为测试。。

public function test_program_urls()
{
$programs = Program::all()->take(5);
foreach($programs AS $program) {
$this->browse(function (Browser $browser) use ($program) {
$browser->visit($program->program_slug)
->clickLink($program->program_name)
->assertSeeLink($program->program_name);

});

}
}

测试/断言通过了,但我看不到检查ClickLink状态的方法(https://laravel.com/docs/8.x/dusk#available-断言(

我试着把它作为数据库测试来做,但断言更少。。https://laravel.com/docs/8.x/database-testing#available-断言

也许我在回答我自己的问题。。我应该在播种/导入过程中进行测试,每次遇到问题时都修复Excel表,或者记录所有404,以备将来检查。

如果您需要在单元测试期间检查响应代码,您可以在测试中使用assertStatus。例如:

$response = $this->getJson($program_url);
$response->assertStatus(404);

或者像这样使用Http::get并检查状态。(你可以在代码中的任何地方使用它,而不仅仅是在测试中(:

$response = Http::get($program_url);
if($response->status()==404) {
........
}

或者您可以使用php函数:get_headers。你也可以在代码中的任何地方使用它,它比前一个更快:

private function pageExists($url) {
$headers=@get_headers($url);
return $headers && $headers[0] != 'HTTP/1.1 404 Not Found';
}

你可以这样使用这个方法:

if($this->pageExists($program_url)) {
.........
}

最新更新