小编Ala*_*bak的帖子

在PHPUnit提供程序中使用工厂失败

我正在尝试使用模型工厂在数据提供程序中创建模型。如果我在设置方法中或直接在测试中使用工厂,则可以使用,但是如果我尝试在数据提供程序中使用它,则会出现错误:

1)警告

为MyClassTest :: testSomeMethod指定的数据提供者无效。

无法找到名称为[default] [App \ Model \ User]的工厂。

工厂定义:

/** @var \Illuminate\Database\Eloquent\Factory $factory */
$factory->define(\App\Model\User::class, function (Faker\Generator $faker) {
    static $password;

    return [
        'id' => $faker->unique()->numberBetween(1, 10000),
        'email_address' => $faker->unique()->safeEmail,
        'remember_token' => str_random(10),
        'password' => $password ?: $password = bcrypt('secret'),
    ];
});

$factory->state(\App\Model\User::class, 'guest', function ($faker) {
    return [
        'role_id' => 9999,
    ];
});
Run Code Online (Sandbox Code Playgroud)

我给工厂打电话:

factory(\App\Model\User::class)->states('guest')->make();
Run Code Online (Sandbox Code Playgroud)

是Laravel的错误,还是我在这里错过了一些东西?

编辑:

经过一些调试之后,我发现工厂定义没有在数据提供者调用之前加载,而是在调用setUp()方法时(即在数据提供者调用之后发生)调用了(即定义了)工厂定义,因此找不到工厂在数据提供者中。

因此在我看来,不可能在数据提供程序中使用工厂(或测试类中的任何静态方法)。否则我应该做一些事情来在我的数据提供者方法中定义工厂!

php phpunit laravel laravel-5.3

5
推荐指数
2
解决办法
1307
查看次数

标签 统计

laravel ×1

laravel-5.3 ×1

php ×1

phpunit ×1