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.
我的测试用例:
<?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.