我正在尝试编写测试来测试我已经工作了一段时间的遗留应用程序上的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');
到setUp
和testSomeProtectedTask
方法没有太大成功。在测试Laravel时应该关闭过滤器,但我不确定,我无法找到如何完全关闭它们。
修改
我后来发现我的环境设置为'production'
而不是'testing'
,因为测试配置错误但问题仍然有效,因为我还需要测试'auth'
过滤器。
可以通过添加Route::enableFilters()
来启用测试。
有关topic的更多信息。
问题:
有没有人知道如何在测试前关闭auth
过滤器,而不会在测试前将其评论出来?或者,有没有更好的方法来测试Laravel 4.2中的API端点并以某种方式模拟身份验证?
答案 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();
}