如何解决无法找到名称为[默认] [App \ Models \ Domain]的工厂?

时间:2016-01-01 17:01:17

标签: laravel unit-testing phpunit laravel-5.1

我正在尝试添加工厂以帮助增加某些控制器的测试覆盖率。到目前为止,我一直在使用工厂没有问题,在那里我没有找到这个消息的理由,我无法弄清楚与其他工厂有什么不同,这些工厂运作良好。

错误是:

1) GuestBusinessControllerTest::it_presents_a_domain_home
InvalidArgumentException: Unable to locate factory with name [default] [App\Models\Domain].

我引用有用的文件如下:

我的Controller Test尝试使用工厂(通过特性)

<?php

use Illuminate\Foundation\Testing\DatabaseTransactions;

class GuestBusinessControllerTest extends TestCase
{
    use DatabaseTransactions;
    use CreateBusiness, CreateDomain;

    // ...

    /** @test */
    public function it_presents_a_domain_home()
    {
        $domain = $this->createDomain();

        // ...
    }
}

trait using the factory

<?php

use App\Models\Domain;

trait CreateDomain
{
    private function createDomain($overrides = [])
    {
        return factory(Domain::class)->create($overrides);
    }

    // ...

}

factory definition

// ...

$factory('App\Models\Domain', function ($faker) {
    return [
        'slug'     => str_slug($faker->sentence(3)),
        'owner_id' => 'factory:App\Models\User',
    ];
});

// ...

我正在使用"laracasts/testdummy": "~2.0"

// ...

    "require-dev": {
        // ...
        "laracasts/testdummy": "~2.0",
        // ...
    },

// ...

图片的标题说明:

  

是的,我做过composer dump-autoload(否则,错误信息会有所不同)

     

我尝试在另一个帮助文件中定义工厂,dump-autoload。 (以防万一)

     

我也尝试重命名我的模型,认为Domain可能是一个有冲突的关键字,但这似乎不是问题。

我该如何解决这个错误?

1 个答案:

答案 0 :(得分:4)

发现问题

因为我使用tests/factories/factories.php,所以我一直在想我正在处理文件laracasts/testdummy

事实证明(可能是自从迁移到L5.1,但不确定),我现在使用database/factories/ModelFactory.php,我有一天用我的旧工厂更新了,但从未删除tests/factories/factories.php和因此,编辑它以换取新的变化毫无价值。

现在我已经删除了这个文件并保留了一个开箱即用的Laravel 5.1解决方案。