Laravel使用phpunit测试User :: store()

时间:2014-08-05 15:40:54

标签: laravel-4 phpunit

我现在正在学习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}}页面。

我如何完成此测试?

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);
    }
}