-1

これは私がテストしようとしているコードです

    public function forgot($email)
{
    try
    {
        // Find the user using the user email address
        $user =$this->sentry->findUserByLogin($email);

        $resetCode = $user->getResetPasswordCode();

         return true;
    }
    catch (UserNotFoundException $e)
    {
        $this->errors[] = 'User was not found.';

        return false;
    }
}

これが私のテストコードです

  function it_should_forgot(Sentry $sentry)
{
    $email = 'johndavedecano@gmail.com';

    $sentry->findUserByLogin($email)->shouldBeCalled();

    $this->forgot($email);
}

ここにエラーがあります

PHP Fatal error:  Call to a member function getResetPasswordCode() on a non-object in /var/www/laravel/app/Services/SentryService.php on line 103

私の質問は、テスト内でセントリーを既にモックしているため、なぜこのエラーが発生するのですか?

4

1 に答える 1

0

ここではあざける必要はありません。Sentryスタブ ( ) とダミー ( )Userのみが必要です。

function it_returns_true_if_user_is_found(Sentry $sentry, User $user)
{
    $email = 'johndavedecano@gmail.com';

    $sentry->findUserByLogin($email)->willReturn($user);

    $this->forgot($email)->shouldReturn(true);
}

function it_returns_false_if_user_is_not_found(Sentry $sentry)
{
    $email = 'johndavedecano@gmail.com';

    $sentry->willThrow(new UserNotFoundException())->duringFindUserByLogin($email);

    $this->forgot($email)->shouldReturn(false);
}

推奨読書

于 2014-09-08T19:54:51.517 に答える