在功能测试中遇到模拟的问题。
对于模拟,我在 Laravel 中使用 Mockery ,在 Codeception上编写的测试
需要测试向用户发送验证消息。
我尝试用几种方式模拟Guzzle(Client,ClientInterface,ResponceInterface),代码如下:
$client = Mockery::mock(GuzzleHttp\Client::class);
$client->shouldReceive('get')->once();
$I->haveInstance(GuzzleHttp\Client::class, $client);
所有尝试都会收到:
来自Mockery_2_GuzzleHttp_Client的方法get()应该被称为
恰好1次,但被称为0次。
我想测试的控制器的一部分:
$client = new \GuzzleHttp\Client();
$url = config('sms.url') . '/sys/send.php?login=' . config('sms.login') . '&psw=' . config('sms.password') . '&phones='
. $user->phone . '&mes=' . urlencode($data['notification']) . '&charset=utf-8';
$client->get($url);
答案 0 :(得分:0)
haveInstance
方法将实例绑定添加到Laravel服务容器。
您的控制器代码不会从服务容器中检索Guzzle客户端,但会创建一个新实例。这是一个不可测试的代码。
您必须修改控制器代码才能使用服务容器。