Я только что начал новый проект Laravel и создал фабрику моделей:
<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\Model;
use Faker\Generator as Faker;
$factory->define(\App\Grade::class, function (Faker $faker) {
return [
'grade_number' => 1,
'valid_from' => \Carbon\Carbon::now(),
];
});
Для следующей модели:
<?php
namespace App;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
class Grade extends Model
{
/**
* Scope a query to select the latest date entry for each grade
*
* @param $query
*
* @return mixed
*/
public function scopeCurrent($query)
{
// This selects the latest set of grades from the table with a current start date
return $query->where('valid_from', '<', Carbon::now())->orderByDesc('valid_from');
}
}
Когда я вызываю это из php artisan tinker
,модель создана:
>>> $grade = factory(\App\Grade::class)->make();
=> App\Grade {#3057
grade_number: 1,
valid_from: Carbon\Carbon @1576082185 {#3050
date: 2019-12-11 16:36:25.169212 UTC (+00:00),
},
}
Но когда я вызываю это из своего теста:
<?php
namespace Tests\Unit;
use App\Grade;
use Illuminate\Foundation\Testing\RefreshDatabase;
use PHPUnit\Framework\TestCase;
class GradeTest extends TestCase
{
use RefreshDatabase;
/** @test */
public function it_knows_its_latest_grades()
{
$grade = factory(Grade::class)->make();
}
}
Я получаю следующую ошибку:
InvalidArgumentException : Unable to locate factory with name [default] [App\Grade].
Этосвежая установка Laravel 6, так что я не могу понять, почему это происходит. Я уже безуспешно пытался запустить composer dump-autoload
и php artisan cache:clear
.
Мой PHPUnit.xml
файл выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>
<server name="MAIL_DRIVER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
</php>
</phpunit>