Laravel测试并没有将工厂保存到数据库中
我在测试方面遇到了麻烦,因为我工厂的记录没有保存到数据库中,无法用于API测试。下面是一个示例测试Laravel测试并没有将工厂保存到数据库中,laravel,api,testing,phpunit,Laravel,Api,Testing,Phpunit,我在测试方面遇到了麻烦,因为我工厂的记录没有保存到数据库中,无法用于API测试。下面是一个示例测试 use DatabaseTransactions; public function testUserMe() { $user = factory(\App\Models\User::class, 'userA')->create(); $token = factory(\App\Models\ApiToken::class, 'userA-token')->creat
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()
。有人知道我还能去哪里吗
为什么
使用DatabaseTransactions
会阻止创建记录?在运行测试之前,数据库种子是否正确?不,我认为不是。我看到这样一个问题*正在讨论Laravel 5.1,并且看到它已经被修复。我用的是5.4。你认为这是同一个问题吗*我想不是同一个问题<代码>数据库事务不会为您运行迁移。因此,您至少需要在测试之前创建结构。但奇怪的是,它在没有数据库事务的情况下正常运行。问题似乎很相似,测试是在数据保存到数据库之前运行的。但是,我现在没有太多的时间来深入研究代码以将其调试到相同的级别。更新:我可以从MySQL日志和更多调试中看到,记录正在保存到数据库并回滚。我假设他们在测试完成之前回滚。在运行测试之前,数据库种子是否正确?不,我不这么认为。我看到这样一个问题*正在讨论Laravel 5.1,并且看到它已经被修复。我用的是5.4。你认为这是同一个问题吗*我想不是同一个问题<代码>数据库事务
不会为您运行迁移。因此,您至少需要在测试之前创建结构。但奇怪的是,它在没有数据库事务的情况下正常运行。问题似乎很相似,测试是在数据保存到数据库之前运行的。但是,我现在没有太多的时间来深入研究代码以将其调试到相同的级别。更新:我可以从MySQL日志和更多调试中看到,记录正在保存到数据库并回滚。我想他们会在测试完成前撤退。