Last active
February 9, 2019 05:56
-
-
Save JeffreyWay/5348385 to your computer and use it in GitHub Desktop.
Quick reminder that you can get away with not injecting Facades. They can be swapped out with mocks quite easily.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class MyMailer { | |
public function deliver() | |
{ | |
// This facade doesn't need to be injected into the class. | |
Mail::send('emails.welcome', [], function($m) | |
{ | |
$m->to('[email protected]') | |
->subject('Welcome to the site') | |
->setCharset('UTF-8'); | |
}); | |
} | |
} | |
class ExampleTest extends TestCase { | |
public function tearDown() | |
{ | |
Mockery::close(); | |
} | |
public function testBasicExample() | |
{ | |
// mock it | |
Mail::shouldReceive('send')->once(); | |
(new MyMailer)->deliver(); | |
} | |
} |
This worked with the Mail class but not with a model. I am confused as to why. When I tried the same thing with a model, PHPUnit said the method shouldReceive was not defined.
It's not the Mail class, but the Mail Facade. Only facade got this magic.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is fantastic! Can this even be done with PHPUnit's getMock? I didn't realize you could mock a static class!