【问题标题】:Laravel passport test fails after update to laravel 8更新到 laravel 8 后 Laravel 护照测试失败
【发布时间】:2020-09-15 03:58:01
【问题描述】:

更新到 laravel 8 后,我的护照测试因工厂原因而失败,对于所有测试,我都会收到如下消息:

BadMethodCallException: Call to undefined method Laravel\Passport\Client::factory()

【问题讨论】:

  • 你之前的问题说所有的测试都失败了,现在只有护照测试了吗?这是升级前的测试吗?
  • 是的,我调整了我拥有的所有工厂,修改了一些东西。现在我对 Passport 的 Client::factory() 有问题
  • 也许您也想解决您发布的最后一个问题
  • Laravel\Passport\Client 模型没有实现 HasFactory 特征,因此它没有 factory 方法
  • 但在护照文件(部分测试)中,工厂调用与任何常规 laravel 模型相同

标签: laravel testing laravel-passport


【解决方案1】:

Laravel\Passport\Client 模型不使用 HasFactory 特征。您必须直接致电工厂:

Laravel\Passport\Database\Factories\ClientFactory::new()->count(3)->make();

Laravel 8.x Docs - Database Testing - Model Factories - Creating Models

【讨论】:

  • 我直接创建工厂,但现在为这段代码``` $building = Building::factory()->create(); Passport::actingAsClient( PassportClientFactory::new()->create(), ); $response = $this->get('/api/buildings/'.$building->id); $response->assertStatus(200); $response->assertJsonFragment(['name' => $building->name]); ``` 我得到了这个:``` Illuminate\Contracts\Container\BindingResolutionException:目标类[绑定] 不存在。 ```
  • 我不明白“但现在为这段代码”是什么意思?
  • 你还没有解决你发布的最后一个问题stackoverflow.com/questions/63870060/…
  • 使用堆栈跟踪来帮助找到错误的来源,仅基于此很难判断...只需在代码的开头放一个反引号,在结尾放一个反引号即可在 cmets 中格式化:)
【解决方案2】:

我最终通过删除 RoutesServiceProvider 中 api 路由的命名空间来解决这个问题。我还使用 \Illuminate\Routing\Middleware\SubstituteBindings::class 代替 api 中间件组(Kernel.php)中的绑定,并且在 api 路由中使用控制器类

【讨论】:

    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 2020-03-05
    • 2020-03-09
    • 2017-12-22
    • 2019-06-28
    • 2016-06-28
    • 2019-02-27
    相关资源
    最近更新 更多