【问题标题】:Laravel 5.7 Unable to locate factory with name [default] [App\User]Laravel 5.7 无法找到名称为 [default] [App\User] 的工厂
【发布时间】:2019-03-19 11:24:08
【问题描述】:

Laravel 5.7 工厂发生了什么?当我在php artisan tinker 上运行工厂时,它工作正常。但是当我将它与单元测试一起使用时,它会引发错误:

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

这是我的单元测试

<?php

namespace Tests\Unit;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use \App\User;

class UserTest extends TestCase
{
    use DatabaseTransactions;

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

    /**
     * @test
     */
    public function a_sample_test()
    {
        $this->assertTrue(!empty($this->user));

    }
}

UserFactory 是通过运行生成的 php artisan make:factory UserFactory --model=User

这是我在 /database/factories 上的用户工厂

<?php

use Faker\Generator as Faker;

$factory->define(\App\User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => bcrypt('secret'),
        'remember_token' => str_random(10),
    ];
});

我在这里遇到过类似的问题,但他们似乎都有相同的答案来使用\App\Model::class 而不是App\Model::class

【问题讨论】:

    标签: php laravel unit-testing factory laravel-5.7


    【解决方案1】:

    哦,开枪! parent::setUp() 已修复此问题。

    public function setUp()
    {
        parent::setUp();
    
        // more codes here
    }
    

    【讨论】:

    • 没有修复我,我仍然遇到同样的错误。我该如何解决?
    【解决方案2】:

    错误也是由于导入错误的TestCase而引发的,而不仅仅是parent::setUp();

    -

    use PHPUnit\Framework\TestCase; [错误: 并抛出此错误]


    use Tests\TestCase;[正确]

    【讨论】:

    • 随着 Laravel 7 进行单元测试,这是唯一对我有用的东西。但如果您使用命令行创建单元测试,这是默认的类导入。
    猜你喜欢
    • 2017-03-13
    • 2017-04-20
    • 2019-05-26
    • 2017-09-20
    • 2020-02-26
    • 2016-04-06
    • 1970-01-01
    • 2020-04-05
    • 2018-02-14
    相关资源
    最近更新 更多