5

我有一个问题 - 我正在为我的 api 使用 Laravel Passport。我需要编写测试。每当我WithoutMiddleware在测试中使用该特征时,它都会禁用Implicit route model binding我使用的该功能。每当我不使用该特征时,我都需要直接从我的测试中进行身份验证。为此,我需要通过 Passport 创建一个 API 令牌。

但是,Passport 需要在通过 测试之前安装artisan passport:install,因为我的测试使用的是DatabaseTransactionsDatabaseMigrationstrait。当我这样做时,测试需要花费大量时间来运行,我觉得这不是正确的方法。没有办法只禁用auth中间件吗?或任何其他想法去解决这个问题?

4

2 回答 2

2

派对有点晚了,但根据这个问题,这个功能目前不受支持,没有计划很快改变它。

但是,所有 Laravel 测试类都继承了该withoutMiddleware方法,您可以使用它来禁用特定方法的中间件。不确定这是否对您有帮助,但只是把它扔在那里:

public function testBasicExample()
{
    $this->withoutMiddleware();

    $this->visit('/')
         ->see('Laravel 5');
}

runningUnitTests()您还可以通过调用Application 实例上的方法来检查测试是否在中间件本身内运行。

于 2016-12-10T03:42:06.670 回答
0

目前测试受护照保护的 API 路由的最简单方法

Passport::actingAs(
    factory(User::class)->create(),
    ['create-servers']
);

Laravel 文档上的护照测试

于 2018-06-19T15:03:59.367 回答