您好我正在尝试为不依赖于视图的laravel控制器创建测试。我的控制器类中有以下方法:
public function store(Request $request)
{
$this->validate($request,[
'name'=>'required',
'login'=>'required',
'password'=>'required'
]);
//TODO: Store to database
return redirect('usuario/nuevo');
}
我找到以下代码来测试请求是否有任何错误:
public function testStore()
{
$response=$this->call('GET','usuario.store');
$this->assertSessionHasErrors();
}
因为我发送的请求没有填写必填字段,所以这个测试应该通过,但是PhpUnit会返回以下消息:
Session missing key: errors
Failed asserting that false is true.
我能使其发挥作用的唯一方法是尝试"看"通过进行如下测试的响应页面上的错误消息:
public function testStore()
{
$this->visit('/usuario/nuevo')
->press('Crear')
->see('Whoops');
}
这对我来说不起作用有两个原因:1)测试取决于视图"按"按钮并发送请求(我希望在不同的测试中对此进行测试并严格保留此控制器)和2)测试取决于'哎呀'要出现的字符串,这显然是不好的做法。
我找到了几个答案,声称第一个测试代码应该可行,但它根本就没有。
答案 0 :(得分:2)
尝试使用会话启动并发送空参数
$this->startSession();
$this->call('GET','usuario.store', array(
'name' => '',
'login' => '',
'password' => ''
));
$errors = session('errors');
$this->assertSessionHasErrors();
$this->assertEquals($errors->get('name')[0],""your custom error message);// only for checking exact message
答案 1 :(得分:0)
您的问题是您没有测试您认为自己正在测试的内容。
要执行控制器的商店(),你应该使用POST方法而不是GET,除非你的路线真的很奇怪。