所以,在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计数。
如果你就如何防止这种行为给我一些建议会很棒。
提前致谢。 :)
答案 0 :(得分:2)
您必须使用DatabaseMigrations
。即使事务被反转,数据库也会增加主键。它必须,否则您的应用中可能会有其他问题重复主键。