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 次 |
最近记录: |