gpt4 book ai didi

unit-testing - 我如何在 Laravel 4.1 中对 auth 过滤器进行单元测试?

转载 作者:行者123 更新时间:2023-12-04 04:14:05 26 4
gpt4 key购买 nike

我想编写一个单元测试来检查未经身份验证的用户是否可以查看用户列表(他不应该查看)。

我的路线

Route::group(array('prefix' => 'admin'), function() {
Route::get('login', function() {
return View::make('auth.login');
});
Route::post('login', function() {
Auth::attempt( array('email' => Input::get('email'), 'password' => Input::get('password')) );
return Redirect::intended('admin');
});
Route::get('logout', 'AuthController@logout');

Route::group(array('before' => 'auth'), function() {
Route::get('/', function() {
return Redirect::to('admin/users');
});
Route::resource('users', 'UsersController');
});
});

我的测试
public function testUnauthenticatedUserIndexAccess() {
$response = $this->call('GET', 'admin/users');

$this->assertRedirectedTo('admin/login');
}

我的过滤器
Route::filter('auth', function() {
if (Auth::guest()) return Redirect::guest('admin/login');
});

结果

未能断言 Illuminate\Http\Response Object (...) 是类“Illuminate\Http\RedirectResponse”的实例。

如果我从测试中记录 $response,它会显示完整的用户列表,就像管理员在测试期间登录一样。

如果我在没有登录的情况下使用浏览器浏览到管理员/用户,我会像我应该的那样重定向到登录,所以身份验证过滤器确实在工作。

问题
  • 默认情况下,Laravel 中是否有某些东西会在测试期间为您登录第一个用户?或者 Auth::guest() 在测试期间默认情况下始终为 false?
  • 如果是这样,我如何在单元测试期间“注销”?我试过 $this->be(null) 但得到一个错误,说传递的对象必须实现 UserInterface。
  • 最佳答案

    单元测试会自动禁用 Laravel 过滤器;您需要为特定的测试用例启用它们。

    Route::enableFilters();

    或者,如果您不热衷于使用静态外观
    $this->app['router']->enableFilters();

    Take a look in the unit testing documentation.

    您的测试现在应该返回正确的对象类型,允许您的测试通过。

    关于unit-testing - 我如何在 Laravel 4.1 中对 auth 过滤器进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22580882/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com