在 laravel 4 中测试过滤器

2024-02-19

我是 Laravel 的新手。我正在尝试测试身份验证是否适用于我的网站,并且我想在测试用例中测试身份验证过程。我创建一个内存中的 sqlite 数据库,创建一个新用户并使用->save()eloquent 的方法将其存储在数据库中。我设置了一个身份验证过滤器,用于检查数据库中的用户名,并根据情况允许用户登录或返回“无效凭据”

// 我的 UserTest.php 文件:

class UserTest extends TestCase {

public function testUsernameIsNotRequired()
{
    // Create a new User
    $user = new User;
    $user->username = "[email protected] /cdn-cgi/l/email-protection";
    $user->password = "123456";
    //$user->password_confirmation = "password";

    // User should save
    $this->assertTrue($user->save());

    // Save the errors
    $password = $user->getAuthPassword();

    // There should be 0 error
    $this->assertEquals("123456",$password);
    $this->seed();

    $this->be($user);

    $this->assertTrue(Redirect::route('authFilter'));
}
}

只是为了让您知道,一旦测试完成,内存数据库就会丢失,因为与它的所有连接都丢失了,所以我想检查我保存到数据库的用户是否已正确插入,其次我想检查是否我可以使用这个新用户的信息登录我的网站。

// 我的filters.php 文件:

Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::guest('login');
});


Route::filter('auth.basic', function()
{
    return Auth::basic('username');
});

Route::filter('guest', function()
{
    if (Auth::check()) return Redirect::to('/');
});

Route::filter('csrf', function()
{
    if (Session::token() != Input::get('_token'))
    {
        throw new Illuminate\Session\TokenMismatchException;
    }
});

我试图将过滤器附加到路由,以便我可以在测试期间重定向到该路由,并调用 auth.basic 过滤器,以便我可以测试我的过滤器,我知道我做错了很多事情,所以请随意纠正您遇到的任何错误

我的routes.php 文件:>

Route::get('/', function()
{
    return View::make('hello');
});

Route::get('/authtest', array('as'=>'/authtest','before' => 'auth.basic', function()
{
     return View::make('hello');
}));

Route::group(array('prefix' => 'api/v1', 'before' => 'auth.basic'), function()
{
    Route::resource('url', 'UrlController');
});

Route::get('authFilter', array('as'=>'authFilter','before' => 'auth.basic', function()
{
    return Auth::basic('username');
}));

我还有一个 uri 控制器,其中包含我网站的所有页面

this http://net.tutsplus.com/tutorials/php/laravel-4-a-start-at-a-restful-api/这就是我目前创建 uri 控制器所遵循的方法

我需要一个测试用例,创建一个用户并将其存储到内存数据库中,然后使用该用户信息进行身份验证。如果有人知道 Laravel 过滤器测试,请告诉我,我查找了测试过滤器的文档,但我想它没有很好的记录。

谢谢


Laravel 4 的测试中禁用了过滤器。

您可以使用Route::enableFilters()在您的测试中强制打开过滤器。

您可以阅读有关为什么/为什么不测试过滤器的各种讨论;

  • https://github.com/laravel/framework/issues/344 https://github.com/laravel/framework/issues/344
  • https://github.com/laravel/framework/issues/766 https://github.com/laravel/framework/issues/766
  • http://forums.laravel.io/viewtopic.php?id=7404 http://forums.laravel.io/viewtopic.php?id=7404
  • https://github.com/laravel/framework/issues/682 https://github.com/laravel/framework/issues/682
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 laravel 4 中测试过滤器 的相关文章

随机推荐