我正在对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
];
});
如果我在Tinker使用工厂,那就可以了。
对于其他类,我也有类似的测试函数和工厂,并且它们工作正常。
我很可能犯了一个非常愚蠢的错误,但我找不到它。
有什么建议吗?
亲切的问候,
休伯特
答案 0 :(得分:3)
您正在扩展php单元测试用例类。这不会加载您的Laravel应用程序。您应该扩展Laravel提供的Tests \ TestCase的使用。
在CLI上使用php artisan make:test UserTest将创建具有正确模板的测试,以测试Laravel应用程序。