#環境
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連続で呼んだ場合をモック出来ました。
そんなん知ってるよ、って話かもしれませんが、ググっても出てこなくて手間取ったので報告します。
ありがとうございました。