我在测试时遇到问题,因为我的工厂的记录没有保存到我的API测试的数据库中。这是一个示例测试
use DatabaseTransactions;
public function testUserMe()
{
$user = factory(\App\Models\User::class, 'userA')->create();
$token = factory(\App\Models\ApiToken::class, 'userA-token')->create();
$this->refreshApplication(); // I've tried with and without this line
$headers = ['HTTP_Authorization' => 'Bearer '. $token->token];
$this->json('GET', '/user/me', [], $headers, $headers)
->assertJson([
'first_name' => $user->first_name,
'last_name' => $user->last_name,
'email' => $user->email,
])
->assertStatus(200);
}
注意:我在请求中有$headers
两次因为我看到示例中的不一致但这与问题无关。
我遇到的问题是中间件失败,因为用户和令牌尚未提交到数据库。如果我删除use DatabaseTransactions
它将按预期工作(中间件工作和测试通过),但测试后数据不会被清除。
我在上一个项目中完成同样的工作,我认为是相同的设置,包括缺少setup()
和teardown()
。有没有人对我可以看到的其他地方有一些想法?
为什么use DatabaseTransactions
会阻止创建记录?