【问题标题】:PHPUnit Laravel InvalidArgumentException: Unable to locate factory with name [default] [App\User]PHPUnit Laravel InvalidArgumentException:无法找到名称为 [default] [App\User] 的工厂
【发布时间】:2017-03-13 14:40:13
【问题描述】:

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

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 artisan tinker 运行

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

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

【问题讨论】:

    标签: php laravel testing factory


    【解决方案1】:

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

    function setUp()
    {
        parent::setUp(); // was missing
    
        $this->user = factory(App\User::class)->create();
    }
    

    【讨论】:

      【解决方案2】:

      你总是得到的主要原因

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

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

      如果你调用它,请确保你这样做:

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

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

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2020-02-26
        • 2017-04-20
        • 2019-03-19
        • 2017-09-20
        • 2019-05-26
        • 2020-04-05
        • 2016-04-06
        • 1970-01-01
        • 2018-02-14
        相关资源
        最近更新 更多