PHPUnit Laravel InvalidArgumentException:无法找到名称为[factory] ​​[App \ User]

时间:2016-10-31 13:45:03

标签: php laravel testing factory

我在测试中有一个设置功能,它执行以下操作

function setUp()
{
    $this->user = factory(User::class)->create();
}

当然我使用“使用App \ User;”在最顶端。

这是我的模型工厂

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

    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => $password ?: $password = bcrypt('secret'),
        'remember_token' => str_random(10),
    ];
});

运行phpunit时出现错误

InvalidArgumentException: Unable to locate factory with name [default] [App\User].

但是:如果我去php工匠修补一下

factory(User::class)->create();

它的工作原理...我尝试了App \ User :: class和其他东西,甚至直接将它放在测试中而不是setUp方法。奇怪的是,同一文件中的另一个工厂正在工作。

2 个答案:

答案 0 :(得分:11)

我找到了解决方案:我需要调用父setUp函数

function setUp()
{
    parent::setUp(); // was missing

    $this->user = factory(App\User::class)->create();
}

答案 1 :(得分:0)

你总是得到

的主要原因
InvalidArgumentException: Unable to locate factory with name [default] [App\User].

是因为您的应用无法找到用户模型。

如果你打电话,请确保你这样做:

factory(\App\User::class)->create();

我在进行单元测试时遇到了这个问题。

我希望它有所帮助。