我是 Laravel 新手。我正在尝试测试身份验证是否适用于我的网站,并且我想在测试用例中测试身份验证过程。我创建了一个内存中的 sqlite 数据库,创建了一个新的 User 并使用 eloquent 的 ->save()
方法将其存储在数据库中。我设置了一个身份验证过滤器,用于检查数据库中的用户名,并根据情况允许用户登录或返回“无效凭据”
//我的 UserTest.php 文件:
class UserTest extends TestCase {
public function testUsernameIsNotRequired()
{
// Create a new User
$user = new User;
$user->username = "phil@ipbrown.com";
$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 Controller ,其中包含我网站的所有页面
this 是我目前用来创建 uri Controller 的内容
我需要一个测试用例,创建一个用户并将其存储到内存数据库中,然后使用该用户信息进行身份验证。如果有人知道 Laravel 过滤器测试,请告诉我,我查找了测试过滤器的文档,但我想它没有很好的记录。
谢谢
最佳答案
在 Laravel 4 的测试中过滤器被禁用。
您可以在测试中使用 Route::enableFilters()
来强制启用过滤器。
您可以阅读有关为什么/为什么不测试过滤器的各种讨论;
关于php - 在 Laravel 4 中测试过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17458058/