在Laravel中进行测试时,数据库事务不会阻止id递增

时间:2016-09-13 02:06:52

标签: php laravel testing

所以,在Laravel 5.3中我有以下测试:

class ArticleTest extends TestCase
{
    use DatabaseTransactions;

    /** @test */
    public function it_fetches_trending_articles()
    {
        factory(Article::class, 3)->create();
        factory(Article::class)->create(['reads' => 10]);
        $mostPopular = factory(Article::class)->create(['reads' => 20]);

        $articles = Article::trending();

        $this->assertEquals($mostPopular->id, $articles->first()->id);
    }
}

这里发生的是我创建3篇没有“读取”信息的文章,一篇文章有​​10篇读取,一篇文章有​​20篇读取。我得到了文章,按'读'排序并取第一个并断言它的id等于我肯定是最热门的那个。测试通过,一切正常。

但问题是,DatabaseTransactions特性无法按预期工作。是的,它不会将文章保存到数据库中,但它会在每次测试运行时不断增加id计数。

如果你就如何防止这种行为给我一些建议会很棒。

提前致谢。 :)

1 个答案:

答案 0 :(得分:2)

您必须使用DatabaseMigrations。即使事务被反转,数据库也会增加主键。它必须,否则您的应用中可能会有其他问题重复主键。