在Laravel 4.2中测试时禁用路由过滤器

时间:2018-05-17 14:05:21

标签: php testing laravel-4

我正在尝试编写测试来测试我已经工作了一段时间的遗留应用程序上的API点。 我的路由受auth过滤器保护。

routes.php文件

$route->post('protected/route', ['before' => 'auth', 'uses' => 'ProtectedController@someProtectedTask']);

ProtectedControllerTest.php

public function testSomeProtectedTask {
    $routePayload = [...];
    $response = $this->call('POST', 'protected/route', [], [], [], $routePayload)
    $this->assertResponseOk();
}

我得到的回答是“预期状态代码200,得到401”(未经授权)。

我试图添加

$this->app->forgetMiddleware('auth');

setUptestSomeProtectedTask方法没有太大成功。在测试Laravel时应该关闭过滤器,但我不确定,我无法找到如何完全关闭它们。

修改

我后来发现我的环境设置为'production'而不是'testing',因为测试配置错误但问题仍然有效,因为我还需要测试'auth'过滤器。 可以通过添加Route::enableFilters()来启用测试。 有关topic的更多信息。

问题:

有没有人知道如何在测试前关闭auth过滤器,而不会在测试前将其评论出来?或者,有没有更好的方法来测试Laravel 4.2中的API端点并以某种方式模拟身份验证?

1 个答案:

答案 0 :(得分:0)

虽然@aynber在评论中发布了一些很好的提示,但我仍然无法在一次测试中测试auth而在另一次测试中将其转为。{/ p>

我最终得到的解决方案是模拟用户进行此特定测试。

<强> ProtectedControllerTest.php

public function testSomeProtectedTask {
    $routePayload = [...];

    $this->be(new \Implementation\Of\UserInterface); //simulate logged in user

    $response = $this->call('POST', 'protected/route', [], [], [], $routePayload)
    $this->assertResponseOk();
}