0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravelで、メソッドの返り値に対して呼び出したメソッドをモックする方法

Posted at

#環境
Laravel8系
php 7.3

#伝えたいこと
タイトル何言ってんだと思われたと思います。
語彙力がなくてごめんなさい。

要は、インスタンスのメソッドをモックするのは出来るけど、インスタンスのメソッドの戻り値に対してメソッドを呼び出したとき、そのメソッドをモック出来なくて困ったけど出来たよ、という報告です。ますます伝わらないかも。

コントローラー
class SampleController extends Controller
{
    public function hoge()
    {
        $user = app(User::class)->find(1);

        $someMethod = user->someMethod();    //このsomeMethod()をモックしたい
    }
}

こんな感じに、Userクラスのインスタンスにfindメソッドを呼び出し、それに対して呼び出したsomeMethodをモックしたいとき、どうするか?です。

テスト
use App\Models\User;
use Mockery\MockInterface;

class SampleControllerTest extends TestCase
{
    public function test_for_hoge()
    {
        $mock = $this->mock(School::class, function (MockInterface $mock) {
       
            $mock->shouldReceive('find->someMethod')->once()->andReturn('fuga');
        });

        //以下テスト処理
    }
}

上のような感じで、shouldReceive()の中にfind->someMethodとすることで、メソッドを2連続で呼んだ場合をモック出来ました。

そんなん知ってるよ、って話かもしれませんが、ググっても出てこなくて手間取ったので報告します。
ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?