2017-01-09 4 views
0

機能テストでを嘲笑していくつか問題があります。コード化、模擬兵器

私はLaravelに嘲笑を使用あざけるため、Codeception

を書かれたテストは、ユーザーに確認メッセージを送信するテストする必要があります。

私はいくつかの方法でモックがつがつ食う(クライアント、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

haveInstance方法はLaravelサービスコンテナに結合するインスタンスを追加します。

お使いのコントローラのコードは、サービスコンテナからがつがつ食うクライアントを取得しますが、新しいインスタンスを作成しません。それはテスト可能なコードです。

サービスコンテナを使用するようにコントローラコードを変更する必要があります。

+0

正しい方法を教えてください。 – vladnev

+0

いいえ、私はLaravelを使用していません。 – Naktibalda