Laravel数据库工厂文件未被调用

时间:2016-10-10 12:38:25

标签: php laravel laravel-5 factory

我正在尝试测试我创建的模型,我收到错误:

  

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;一行会导致解析错误。

为什么不根据文档调用这些文件?

1 个答案:

答案 0 :(得分:0)

在我的情况下,TestCase是错误的类。

class CompanyModelTest extends TestCase

您扩展哪个TestCase?我有

use PHPUnit\Framework\TestCase;

代替Laravel自己的。现在可以了!

use Tests\TestCase;

确保扩展正确的TestCase类。