Twinkle

Understanding Service Container is most important to use Laravel

It becomes easier to mock any class.

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();
    }

However, in the example of this question, it is difficult to mock because it is called with $twilio->messages. Older code or code that is automatically generated by OpenAPI often uses properties. When creating packages for Laravel, it is better to consider the ease of testing for users and use the method call form $twilio->messages()->create().

https://stackoverflow.com/questions/78889243/how-to-mock-the-twilio-library-in-laravel/78890240