Twinkle
Twinkle
Laravelの活用にはサービスコンテナの理解が最も大事
どんなクラスでもモックしやすくなる。
AppServiceProvider
use Twilio\Rest\Client;
class AppServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->app->bind(Client::class, function ($app) {
return new Client('', '');
});
}
Controller
use Twilio\Rest\Client;
$twilio = app(Client::class);
$message = $twilio->messages->create()
//
Test
use Mockery;
use Mockery\MockInterface;
use Twilio\Rest\Api\V2010\Account\MessageInstance;
use Twilio\Rest\Client;
use Twilio\Rest\Api\V2010\Account\MessageList;
public function test_twilio(): void
{
$this->mock(Client::class, function (MockInterface $mock) {
$message = Mockery::mock(MessageInstance::class);
$message->sid = 0;
$messages = Mockery::mock(MessageList::class);
$messages->shouldReceive('create')->andReturn($message);
$mock->messages = $messages;
});
$response = $this->get('/twilio');
$response->assertOk();
}
とはいえこの質問の例だと$twilio->messages
で呼び出してるのでモックしにくい。
古い時代のコードだったりOpenAPIで自動生成しただけのコードはプロパティを使ってることが多い。
Laravel用パッケージを作る時はユーザーのテストしやすさまで考えてメソッドで呼び出す$twilio->messages()->create()
の形にしたほうがいい。
https://stackoverflow.com/questions/78889243/how-to-mock-the-twilio-library-in-laravel/78890240