运行测试套件时重置自动增量(id)?

问题描述 投票:0回答:1

假设我有这个测试:

class test extends TestCase
{
    use RefreshDatabase;

    /** @test */
    public function test_ids_example()
    {
        $courses = factory(Post::class, 3)->create();
        $this->assertEquals([1, 2, 3], $courses->pluck('id')->toArray());
    }

    /** @test */
    public function test_ids_example_2()
    {
        $courses = factory(Post::class, 4)->create();
        $this->assertEquals([1, 2, 3, 4], $courses->pluck('id')->toArray());
    }
}

当我一项一项地运行测试时,它通过了.. 但是当我运行整个测试文件时,我收到此错误:

test::test_ids_example_2
Failed asserting that two arrays are equal.
--- Expected
+++ Actual
@@ @@
 Array (
-    0 => 1
-    1 => 2
-    2 => 3
-    3 => 4
+    0 => 4
+    1 => 5
+    2 => 6
+    3 => 7
 )

因为即使我添加了“RefreshDatabase”特征,测试也不会重置自动增量“id”。怎么解决这个问题呢?如何为每次测试保留 id?

laravel phpunit
1个回答
0
投票

1- 在测试类的

DB::statement
方法中使用
setUp()

protected function setUp(): void
{
   parent::setUp();
   DB::statement('ALTER TABLE YourTableName AUTO_INCREMENT = 1');
}

2- 使用

DatabaseMigrations
特质(较慢)

use DatabaseMigrations;

注意:

RefreshDatabase
特征,对于像MySQL/PostgreSQL/...这样的数据库连接,将使用基于事务的方法。它会在每个测试方法之后回滚所有数据库更改,以快速有效地重置状态。

© www.soinside.com 2019 - 2024. All rights reserved.