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

Disable route filters when testing in Laravel 4.2

我正在尝试编写测试来测试 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();
}

我得到的回复是"Expected status code 200, got 401"(未授权)。

我试过添加

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

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

编辑:

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


问题:

有谁知道如何在测试中关闭 auth 过滤器而不在测试前将其注释掉?或者是否有更好的方法来测试 Laravel 4.2 中的 API 端点并以某种方式模拟身份验证?

尽管@aynber 在评论中发布了一些很好的提示,但我仍然无法在一个测试中测试 auth 而在另一个测试中将其关闭。

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

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();
}