我正在尝试运行一个单元测试,在测试运行之前将数据输入到数据库中。我已经定义了一个设置方法,它为我不想要的每个测试用例运行。setup 方法可以正常执行,没有问题。我想要的是将数据输入数据库一次,然后由所有测试用例使用。所以我设置了一个静态函数 setUpBeforeClass。
public static function setUpBeforeClass() : void {
parent::setUpBeforeClass();
static::$journalOption = new JournalOption;
$this->user = factory(User::class)->create();
}
Run Code Online (Sandbox Code Playgroud)
当调用用户工厂类时,我收到以下错误:
InvalidArgumentException:无法找到名称为 [默认] [App\User] 的工厂
UserFactory.php 文件存在于 database/factories/UserFactory.php
<?php
use Illuminate\Support\Str;
use Faker\Generator as Faker;
$factory->define(App\User::class, function (Faker $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
'remember_token' => Str::random(10),
];
});
Run Code Online (Sandbox Code Playgroud)
该factory函数在您的函数中无法正常工作setUpBeforeClass,因为在运行该函数时应用程序尚未启动。您可以引导应用程序并在您的setUpBeforeClass函数中运行迁移,但我不建议这样做。
通常,您应该为每个测试单独创建所需的数据,以防另一个测试修改或删除数据,或者有其他意外的副作用。因此,如果您将工厂保留在您的setup()功能中会更好。如果您担心污染数据库,您可以使用内存中的 SQLite 数据库进行测试。
| 归档时间: |
|
| 查看次数: |
1227 次 |
| 最近记录: |