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

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

我在测试方面遇到了麻烦,因为我工厂的记录没有保存到数据库中,无法用于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()
。有人知道我还能去哪里吗


为什么
使用DatabaseTransactions
会阻止创建记录?

在运行测试之前,数据库种子是否正确?不,我认为不是。我看到这样一个问题*正在讨论Laravel 5.1,并且看到它已经被修复。我用的是5.4。你认为这是同一个问题吗*我想不是同一个问题<代码>数据库事务不会为您运行迁移。因此,您至少需要在测试之前创建结构。但奇怪的是,它在没有
数据库事务的情况下正常运行。问题似乎很相似,测试是在数据保存到数据库之前运行的。但是,我现在没有太多的时间来深入研究代码以将其调试到相同的级别。更新:我可以从MySQL日志和更多调试中看到,记录正在保存到数据库并回滚。我假设他们在测试完成之前回滚。在运行测试之前,数据库种子是否正确?不,我不这么认为。我看到这样一个问题*正在讨论Laravel 5.1,并且看到它已经被修复。我用的是5.4。你认为这是同一个问题吗*我想不是同一个问题<代码>数据库事务
不会为您运行迁移。因此,您至少需要在测试之前创建结构。但奇怪的是,它在没有
数据库事务的情况下正常运行。问题似乎很相似,测试是在数据保存到数据库之前运行的。但是,我现在没有太多的时间来深入研究代码以将其调试到相同的级别。更新:我可以从MySQL日志和更多调试中看到,记录正在保存到数据库并回滚。我想他们会在测试完成前撤退。