Codeception,嘲笑Guzzle

时间:2017-01-09 10:41:13

标签: laravel mocking guzzle codeception

在功能测试中遇到模拟的问题。

对于模拟,我在 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); 

1 个答案:

答案 0 :(得分:0)

  

haveInstance方法将实例绑定添加到Laravel服务容器。

您的控制器代码不会从服务容器中检索Guzzle客户端,但会创建一个新实例。这是一个不可测试的代码。

您必须修改控制器代码才能使用服务容器。