Laravel测试没有将工厂保存到数据库

时间:2017-09-20 04:19:33

标签: 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')->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会阻止创建记录?

0 个答案:

没有答案