加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – Laravel Testing – 与Mockery一起抛出异常

发布时间:2020-12-14 19:49:05 所属栏目:大数据 来源:网络整理
导读:我对Laravel和一般的单元测试都很陌生.我正在尝试为我的AccountController编写一些测试,但我遇到了一个障碍. 我正在使用Sentry来处理站点中的用户和组.我正在尝试测试我的控制器是否正在处理Sentry抛出的异常.所以我处理登录POST的控制器方法如下所示: publ
我对Laravel和一般的单元测试都很陌生.我正在尝试为我的AccountController编写一些测试,但我遇到了一个障碍.

我正在使用Sentry来处理站点中的用户和组.我正在尝试测试我的控制器是否正在处理Sentry抛出的异常.所以我处理登录POST的控制器方法如下所示:

public function postLogin(){

    $credentials = array(
        'email' => Input::get('email'),'password' => Input::get('password')
    );

    try{
        $user = $this->authRepo->authenticate($credentials,true);
        return Redirect::route('get_posts');
    }
    catch (Exception $e){
        $message = $this->getLoginErrorMessage($e);
        return View::make('login',array('errorMsg' => $message));
    }
}

authRepository只是一个使用Sentry来处理身份验证的存储库.现在我想测试一下,如果未指定电子邮件地址,则抛出LoginRequiredException并且用户会看到错误消息.这是我的测试:

public function testPostLoginNoEmailSpecified(){

    $args = array(
        'email' => 'test@test.com'
    );

    $this->authMock
        ->shouldReceive('authenticate')
        ->once()
        ->andThrow(new CartalystSentryUsersLoginRequiredException);

    $this->action('POST','MyAppControllersAccountController@postLogin',$args);

    $this->assertViewHas('errorMsg','Please enter your email address.');
}

但是,测试没有通过.它出于某种原因吐出来的是:

There was 1 error:

1) AccountControllerTest::testPostLoginNoEmailSpecified
CartalystSentryUsersLoginRequiredException:

我是否错误地使用了andThrow()方法?如果有人能够了解正在发生的事情,那将非常感激.

提前致谢!

所以我实际上只是想出了问题.事实证明,我的单元测试根本不是问题,但实际上只是一个命名空间问题.我忘记了Exception类的反斜杠.所以在我的控制器中应该是:
try{
    $user = $this->authRepo->authenticate($credentials,true);
    return Redirect::route('get_posts');
}
catch (Exception $e){
    $message = $this->getLoginErrorMessage($e);
    return View::make('account.login',array('errorMsg' => $message));
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读