2

私はコントローラーのアクションをlaravelでmockeryでテストしようとしています。私はすでにこのチュートリアルをここで読んでいます:

http://culttt.com/2013/07/15/how-to-structure-testable-controllers-in-laravel-4/

コンストラクターで DI を次のように使用します。

public function __construct(User $user, Cartalyst\Sentry\Sentry $sentry)
{
    $this->user = $user;
    $this->sentry = $sentry;

    ...

}

私の問題は、コントローラーの次のコードです。

public function getShow($id)
{
    try
    {
        // this is a problem, because I dont know how to tell mockery, to mock the
        // Userprovider
        $user = $this->sentry->getUserProvider()->findById($id);
        // this is not a problem for me
        $this->user->all();

        ...

Mockery をモック フレームワークとして使用しようとしています。私の質問は、 $this->sentry->getUserProvider() のような呼び出しをモックする方法です (Cartalyst Sentry は高度な認証バンドルです)。ユーザーモデルをモックするには、次のように記述します。

$this->user = Mockery::mock('Eloquent', 'User');

Userprovider をモックする方法、またはこれを別の方法で処理する必要がありますか? IDに応じてユーザーの詳細を取得している場合、UserControllerをテストしたいと思います。

4

1 に答える 1

3

getUserProvider メソッドをスタブして、別のスタブを返すことができます。

$sentry = m::mock("F\Q\C\N\Sentry");
$userProvider = m::mock("F\Q\C\N\UserProvider");
$sentry->shouldReceive("getUserProvider")->andReturn($userProvider)->byDefault();

$userProvider->shouldReceive("findById")->andReturn(new User);
于 2013-11-20T13:55:41.067 に答える