InvalidArgumentException:无法找到名称为 [default] 的工厂 - laravel、faker、phpunit

Posted

技术标签:

【中文标题】InvalidArgumentException:无法找到名称为 [default] 的工厂 - laravel、faker、phpunit【英文标题】:InvalidArgumentException: Unable to locate factory with name [default] - laravel, faker, phpunit 【发布时间】:2020-02-26 03:18:43 【问题描述】:

因为我正在开发包,所以我把我的工厂放在这样的自定义路径中:

-- app

-- packages

-----mockizart

-------blog

---------database

--------------factories

----------------- PageModelFactory.php

---------src

这就是我在我的服务提供商中加载工厂的方式(我已经通过在 phpstorm 上单击它来确保路径正确):

function boot()

 Factory::construct($this->app->make(\Faker\Generator::class), __DIR__."/../database/factories");

这是我的页面模型工厂(我已经确定这个文件真的被加载了):

<?php

/** @var \Illuminate\Database\Eloquent\Factory $factory */
use Mockizart\Blog\Dodols\PageModel;
use Faker\Generator as Faker;


$factory->define(PageModel::class, function (Faker $faker) 
    return [
        'name' => "retretre",
        'slug' => "retretret",
        'type' => 0,
        'category' => 0,
        'tags' => "",
        'content' => "",
    ];
);

这是我的脚本测试:

use Mockizart\Blog\Dodols\PageModel;
    .....
    .....
/** @test */
public function edit_page()

   dd(PageModel::find(1)); <-- this return was NULL so I think my class and namespace does exist.

   factory(PageModel::class)->make(); <-- this cause error "unable to locate factory......"
   $response = $this->get('/blog/page/edit/15');
   $response->assertStatus(200);

【问题讨论】:

【参考方案1】:

所以如果您使用orchestra\Testbench,加载自定义工厂的正确方法是在您的测试类的setUp() 方法中或您的Service Provider 中的TestCase NOT

代码如下:

class TestCase extends \Orchestra\Testbench\TestCase

   public function setUp(): void
   
     parent::setUp();
     // additional setup
     $this->loadMigrationsFrom(__DIR__ . '/../database/migrations');
     $this->withFactories(__DIR__.'/../database/factories');
   

   protected function getPackageProviders($app)
   
       return BlogServiceProvider::class;
   

【讨论】:

以上是关于InvalidArgumentException:无法找到名称为 [default] 的工厂 - laravel、faker、phpunit的主要内容,如果未能解决你的问题,请参考以下文章

PHPUnit + Selenium`InvalidArgumentException:找不到元素`

出现错误:InvalidArgumentException:无法找到名称为 [default] [App\User] 的工厂

(InvalidArgumentException(code: 0): Disk [public] 没有配置驱动程序 Voyager

Laravel:错误 InvalidArgumentException

InvalidArgumentException,“未找到视图”,在 Lumen 5.2.6 上

导入AppiumLibrary报错: ImportError: cannot import name 'InvalidArgumentException