我正在尝试测试我创建的模型,我收到错误:
InvalidArgumentException:无法找到名称为[factory]的工厂 [应用\公司]。
这是我非常简单的模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Company extends Model
{
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function incidents()
{
return $this->hasMany(Incident::class);
}
}
这是工厂:
<?php
$factory->define(\App\Company::class, function () {
return [
'name' => 'ACME Company'
];
});
我的单元测试中的设置方法是抛出错误:
<?php
use Illuminate\Foundation\Testing\DatabaseMigrations;
class CompanyModelTest extends TestCase
{
use DatabaseMigrations;
public function setUp()
{
factory(\App\Company::class)->create();
}
当我运行测试时,我得到了这个:
laradock@63912b4222e6:/var/www/laravel$ vendor/bin/phpunit
PHPUnit 5.5.6 by Sebastian Bergmann and contributors.
E 1 / 1 (100%)
Time: 528 ms, Memory: 4.00MB
There was 1 error:
1) CompanyModelTest::testCompanyName
InvalidArgumentException: Unable to locate factory with name [default] [App\Company].
/var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:126
/var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:2280
/var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:139
/var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:106
/var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:84
/var/www/laravel/tests/CompanyModelTest.php:13
到目前为止,我已经尝试了this other Stackoverflow question关于同一错误的建议,also this one。
我已经尝试将我的新工厂移动到默认存在的ModelFactory.php文件中,并且我尝试使用defineAs()
而不是定义。
我已清除缓存并按照网络上其他帖子的建议运行composer dump-autoload
。
我已经删除了FactoryBuilder::definitions
的内容,这是空的,这就是导致异常被抛出的原因。
我已经确认database\factories
目录中的所有工厂文件都没有使用调试代码调用&amp;一行会导致解析错误。
为什么不根据文档调用这些文件?
答案 0 :(得分:0)
在我的情况下,TestCase是错误的类。
class CompanyModelTest extends TestCase
您扩展哪个TestCase?我有
use PHPUnit\Framework\TestCase;
代替Laravel自己的。现在可以了!
use Tests\TestCase;
确保扩展正确的TestCase类。