Laravel assertDatabase缺少奇怪的行为

时间:2018-12-11 15:33:19

标签: database laravel testing automated-tests

这是我的代码(测试)。此方法没有其他代码:

$this->withoutMiddleware();  
$fc = factory(\App\Models\FaqCategory::class)->create();
$response = $this->delete('/admin/faq-categories/'.$fc->id);
$response->assertStatus(302);
$response->assertRedirect('/admin/faq-categories/');
$this->assertDatabaseMissing('faq_categories', ['id' => $fc->id]);

我不知道为什么,但是即使数据库中不存在行,最后一个声明也会失败。对象已在第3行中删除,但第6行仍然失败。

编辑: 我想到了。我在控制器中使用模型绑定,所以我不能仅仅将$ this-> withoutMiddleware()放在测试中,因为路由模型绑定将不起作用(需要在中间件中完成某些事情)。

1 个答案:

答案 0 :(得分:0)

有同样的问题,要么取决于您的数据库驱动程序支持什么,要么不支持(sqlite等不支持级联),或者项目很简单(就像我的情况一样愚蠢)删除。

请参见

LARAVEL UNIT TEST - Opposite of seeInDatabase

https://laracasts.com/discuss/channels/laravel/super-weird-test-failure