I'm following Laravel's documentation on Mocking Facades in Laravel 10, but I can't seem to get it working with the latest version of this package.
My ultimate goal is to ensure through testing that the methods to create or read tickets, users, etc. are being called in my controllers and models without making an external call to Zendesk to actually create the ticket, user, etc.
Here's a simple example:
// ZendeskController.php
use Huddle\Zendesk\Facades\Zendesk;
...
// The method that handles the route from the test below
public function getUser($id)
{
return Zendesk::users()->find($id);
}
// ZendeskControllerTest.php
use Huddle\Zendesk\Facades\Zendesk;
...
/** @test */
public function the_zendesk_user_can_be_found()
{
Zendesk::spy();
// This user object has a valid zendesk_user_id property
$this->actingAs($this->user)
->get("/api/zendesk/users/{$this->user->zendesk_user_id}");
Zendesk::shouldHaveReceived('users')->once();
}
Running the test results in:
Method users(<Any Arguments>) from Mockery_0_Huddle_Zendesk_Services_ZendeskService should be called at least 1 times but called 0 times.
But, the test passes if I remove the Zendesk::spy() and Zendesk::shouldHaveReceived() lines, and returns the user if I dump the request.
Is there a way to mock the Zendesk facade?
I'm following Laravel's documentation on Mocking Facades in Laravel 10, but I can't seem to get it working with the latest version of this package.
My ultimate goal is to ensure through testing that the methods to create or read tickets, users, etc. are being called in my controllers and models without making an external call to Zendesk to actually create the ticket, user, etc.
Here's a simple example:
Running the test results in:
But, the test passes if I remove the
Zendesk::spy()
andZendesk::shouldHaveReceived()
lines, and returns the user if I dump the request.What am I doing wrong?