如何模拟laravel控制器方法以检查它是否接收到具有适当参数的特定方法的调用

时间:2017-10-25 04:45:14

标签: php laravel testing controller mockery

我正在使用laravel 5.4并在我的api.php文件中有一条路线,如下所示:

Route::middleware('auth:api')->post('/message', 'MessagesController@store');

所以最初我只想说我想检查一下,当我调用'api / message'时,假设调用store()方法。

以下是我尝试的测试代码:

$mock = \Mockery::mock(MessagesController::class);
$mock->shouldReceive('store')->once();
$this->app->instance(MessagesController::class, $mock);

$response = $this->call('POST','api/message',[
        'receiver_id' => $receiver->id,
        'message' => 'Testing OneSignal - unit test'
    ]);
\Mockery::close();

当我运行测试时,我在终端中收到以下错误:

1)Tests\Feature\NotificationTest::a_onesignal_notification_is_sent_when_a_new_message_is_sent Mockery\Exception\InvalidCountException: Method store() from Mockery_1_App_Http_Controllers_MessagesController should be called exactly 1 times but called 0 times.

我的意图并不是真的想检查是否正在调用store()方法,我知道我还有其他方法可以解决。在store方法中,我将一个方法委托给其中一个返回的特征进行curl调用,我想测试该方法是否正在接收预期的参数。

提前感谢您的帮助。

0 个答案:

没有答案