示例:
我有一个带有端点 /something/cool
的路由文件:
$router->get('/something/cool', [
'uses' => 'MyController@myFunctionOne',
]);
我有一个名为 MyController
的 Controller 。
在 MyController
中,我有一个名为 myFunctionOne
的函数。
在 myFunctionOne
参数中,我有一个名为 MyService
的注入(inject)服务类。
MyService
具有调用外部 API callExternalApi()
的函数。
这是我的 Controller 的样子:
class MyController
{
public function myFunctionOne(MyService $myService)
{
$myService->callExternalApi();
// do some other things..
}
}
在另一边我有一个功能测试:
class SomethingCoolTest extends TestCase
{
public function testSomethingCool()
{
// callin my Route Endpoint (real http call to my app)
$this->get('/something/cool', [])->response;
// do some assertions..
}
}
我的问题是:我如何模拟 Controller 注入(inject)服务,因为它正在调用外部服务?
最佳答案
这比我预期的要容易 :D
首先创建一个名为 mock 的模拟辅助函数:
public function mock($class)
{
$mock = \Mockery::mock($class);
$this->app->instance($class, $mock);
return $mock;
}
然后模拟任何你喜欢的服务,如下:
$mimo = $this->mock(MyService::class);
$mimo->shouldReceive('callExternalApi')->once()->andReturn([
"anything" => "cool"
]);
关于api - 如何在 Laravel 中调用端点时模拟注入(inject) Controller 的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38316954/