在 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');
到 setUp
和 testSomeProtectedTask
方法没有多大成功。在测试 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();
}
我正在尝试编写测试来测试 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');
到 setUp
和 testSomeProtectedTask
方法没有多大成功。在测试 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();
}