Jen*_*ski 7 phpunit mocking laravel
我正在尝试测试一个依赖于的函数
$request->all();
Run Code Online (Sandbox Code Playgroud)
在一个方法中。我如何模拟 Request 类以便$request->all();返回
['includes' => ['some_val','another_val']
Run Code Online (Sandbox Code Playgroud)
在测试中?
我建议您使用mockery/mockery. 你必须这样做:
在您的测试方法中执行以下操作:
app()->bind(
\Illuminate\Http\Request::class,
function () {
$mock = \Mockery::mock(\Illuminate\Http\Request::class)->makePartial();
$mock->shouldReceive('all')
->andReturn(['includes' => ['some_val', 'another_val']]);
return $mock;
}
);
Run Code Online (Sandbox Code Playgroud)
你在那里做的是:
mock到Request,因此当您yourMethod(Request $request)这样做时,它将实例化您的模拟而不是真正的类\Mockery::mock(CLASS)->makePartial();将首先创建该类的模拟,然后 ( makePartial()) 将允许您使用其他非模拟方法(使用真实方法),因此您没有模拟的任何方法都将运行真实代码shouldReceive将允许模拟的类模拟该方法( 的参数shouldReceive),因此我们正在模拟all方法并返回您想要的值,在本例中是您发布的数组正如 @devk 所说,Laravel 不建议模拟Request类,所以不要这样做,但如果您需要模拟任何其他对象,您可以使用上面的代码,它将完美地工作。
| 归档时间: |
|
| 查看次数: |
7679 次 |
| 最近记录: |