我现在正在学习Laravel和UnitTesting,所以这可能是一个愚蠢的问题。
我对如何最好地测试下面的控制器功能感到困惑:
UserController中:
public function store()
{
$input = Input::all();
$user = new User($input);
if( ! $user->save()){
return Redirect::back()->withInput()->withErrors($user->getErrors());
}
return Redirect::to('/user');
}
这是我到目前为止的测试:
/**
* @dataProvider providerTestUserStoreAddsUsersCorrectly
*/
public function testUserStoreAddsUsersCorrectly($first_name, $last_name, $email, $password)
{
$response = $this->call('POST', 'user', array('first_name'=>$first_name, 'last_name'=>$last_name, 'email'=>$email, 'password'=>$password));
}
public function providerTestUserStoreAddsUsersCorrectly(){
return array(
array("FirstName", "LastName", "Email@add.com", "pass1234")
);
}
这实际上正在工作并正确地将用户添加到数据库,但是我不确定如何测试输出/要使用哪些断言,因为响应应该是将用户添加到数据库并重定向到{ {1}}页面。
我如何完成此测试?
答案 0 :(得分:1)
如果您需要检查成功状态,则只需从控制器发送状态代码即可 并检查测试中的状态
public function store()
{
$input = Input::all();
$user = new User($input);
if( !$user->save() ){
return array("status"=>'failed');
}
return array("status"=>'success');
}
public function testUserStoreAddsUsersCorrectly($first_name, $last_name, $email, $password)
{
$requested_arr = [
'first_name' => $first_name,
'last_name' => $last_name,
'email' => $email,
'password' => $password
];
$response = $this->call('POST', 'user', $requested_arr);
$data = json_decode($response ->getContent(), true);
if ($data['status']) {
$this->assertTrue(true);
} else {
$this->assertTrue(false);
}
}