我有一个安装了通行证的laravel应用程序,用于管理api身份验证。我正在尝试编写一些测试,但是无法根据laravel上的docs创建客户端。我已经用谷歌搜索类似的答案,但是它们都建议使用我正在使用的setUp和tearDown方法。运行测试时,我得到
InvalidArgumentException
Unable to locate factory for [Laravel\Passport\Client].
如何使它正常工作?
下面是我的代码。我已经包括了护照包中的Client模型,并且正在使用类似SO答案中建议的setUp和tearDown方法。
我尝试过composer dump-autoload
和php artisan config:cache
。
use Laravel\Passport\Passport;
use Laravel\Passport\Client;
...
use RefreshDatabase;
protected function setUp(): void
{
parent::setUp();
}
protected function tearDown(): void
{
parent::tearDown();
}
public function testAPIEndpointFailsWhenNoParamIsSet()
{
Passport::actingAsClient(
factory(Client::class)->create(),
['*']
);
$response = $this->postJson('/api/endpoint', [
'param' => ''
]);
$response->assertStatus(401)
->assertJson(['message' => 'Unauthenticated.']);
}
答案 0 :(得分:1)
护照客户工厂应在发布时存在...
如果没有....让它成为你自己:
来自:here
use Laravel\Passport\Passport;
use Laravel\Passport\Client;
$factory->define(Client::class, function (Faker $faker) {
return [
'user_id' => null,
'name' => $faker->company,
'secret' => Str::random(40),
'redirect' => $faker->url,
'personal_access_client' => 0,
'password_client' => 0,
'revoked' => 0,
];
});