Laravet 测试用例失败,无法 运行 在测试用例上播种

Laravet test case failing, unable to run seed on test case

我的测试用例:

<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
use Illuminate\Http\Response;
use Illuminate\Foundation\Testing\DatabaseMigrations;

class UserTest extends TestCase
{
    use RefreshDatabase, WithFaker, DatabaseMigrations;

    protected $endPoint = '/dashboard/users';

    public function setUp():void
    {
        parent::setUp();
        $this->artisan('migrate:fresh');
        $this->artisan('db:seed');
    }

    public function test_users_list_is_showing_correctly()
    {
        $this->signIn();
        $this->get($this->endPoint)
            ->assertStatus(Response::HTTP_OK);
    }

}

但是,我收到错误消息:

  SQLSTATE[HY000]: General error: 1 no such table: settings (SQL: select "id", "name", "setting_value" from "settings")

它可能会抛出错误,因为,我在 AppServiceProvider

的启动方法中有这段代码
config(['settings' => Setting::get(['id','name','setting_value'])]);

如何解决这个问题?可能是 migration 和 seeder 没有工作,但不确定。

假设您正在使用 laravel 8.x 并且在代码中可以看到您使用了 RefreshDatabase 特性。你可以这样做:

 // Run the DatabaseSeeder...
    $this->seed();

 // Run a specific seeder...
  $this->seed(OrderStatusSeeder::class);

以上代码摘自官方documentation.

或者,您可以设置

protected $seed = true;

在你的基础测试用例中 class。这将 运行 每次使用 RefreshDatabase 特征的测试之前的播种机。

您还可以通过指定

来定义哪个播种机应该运行
protected $seeder = OrderStatusSeeder::class;

在你的测试中class。

希望这对您有所帮助。更多信息你找 here.