我试图添加一个Factory,以帮助增加某些控制器上的测试覆盖率。到目前为止,我一直在使用工厂,没有任何问题,在这里我找不到发出此消息的原因,而且我无法弄清与其他工厂的不同之处,它们运作良好。
错误是:
1) GuestBusinessControllerTest::it_presents_a_domain_home
InvalidArgumentException: Unable to locate factory with name [default] [App\Models\Domain].
我引用了以下有用的文件:
我的Controller Test尝试使用Factory(通过特征)
<?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
可能是一个有冲突的关键字,但这似乎不是问题。我该如何解决这个错误?
最佳答案
发现问题
自从我使用tests/factories/factories.php
以来,我一直以为我正在使用文件laracasts/testdummy
。
事实证明(可能是因为迁移到L5.1以来,但不确定),我现在使用的是database/factories/ModelFactory.php
,我有一天用旧工厂进行了更新,但从未删除过tests/factories/factories.php
,因此,对其进行了新的更改进行编辑一文不值。
现在,我已经删除了该文件,并保留了一个出厂文件,该文件保留了Laravel 5.1解决方案。