我正在为PHPunit做一个单元测试。守则是:
<?php
namespace Tests\Unit;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use PHPUnit\Framework\TestCase;
class ThreadTest extends TestCase
{
use DatabaseMigrations;
public function test_a_thread_has_replies()
{
$thread = factory('App\Thread')->create();
$this->assertInstanceOf('Illuminate\Database\Eloquent\Collection', $thread->replies);
}
}
当我运行PHPUnit时,会得到以下错误:
InvalidArgumentException:无法找到App\Thread的工厂。
我有一个线程工厂:
<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\Thread;
use Faker\Generator as Faker;
$factory->define(Thread::class, function (Faker $faker) {
return [
'user_id' => factory(App\User::class),
'title' => $faker->sentence,
'body' => $faker->paragraph
];
});
如果我用在丁克的工厂,它就能正常工作。
对于其他类,我有类似的测试函数和工厂,这些都很好。
很可能我犯了一个很愚蠢的错误,但我找不到。
有什么建议吗?
致以亲切的问候,
HUbert
发布于 2020-07-11 10:10:05
您正在扩展php单元testcase类。不会加载你的Laravel应用程序。您应该扩展Laravel提供的使用Tests\TestCase
。
在CLI上使用php make:test UserTest
将创建一个适合于测试Laravel应用程序的正确模板的测试。
发布于 2022-10-19 00:43:50
对我有用的是用
$factory->define(App\Model::class, function (Faker $faker) {
//return code here
}
而不是仅仅使用模型名称而不将APP\放在模型名称的前面
$factory->define(Model::class, function (Faker $faker) {
//return code here
}
https://stackoverflow.com/questions/62850919
复制相似问题