我目前正在对我的一些表单验证进行单元测试,需要模拟一个路由参数,以便它可以通过测试。我已经为请求设置了我认为正确的期望,但是我没有正确地做一些事情。
Rule::unique('users')->ignore($this->route('user')->id)
这是我试图通过的模拟考试。我尝试做的所有事情都显示路由上的user属性为null。
$userMock = $this->mock(User::class)->expects()->set('id', 1);
$requestMock = $this->mock(Request::class)
->makePartial()
->shouldReceive('route')
->set('user', $user)
->once()
->andReturn(\Mockery::self());
$this->mock(Rule::class, function ($mock) use ($userMock, $requestMock) {
$mock->expects()->unique('user')->andReturns(\Mockery::self());
$mock->expects()->ignore($requestMock)->andReturns(\Mockery::self());
});
1条答案
按热度按时间yshpjwxd1#
你没有按照你应该做的那样测试:
Feature test
。class
或Job
或Command
时,你可以使用Unit test
(你可以使用PHPUnit的测试用例或Laravel的测试用例,所以在后一种情况下,你加载并拥有可用的框架,我99%的时间都使用这个)。localhost
,但它是其他系统)时,您可以执行Integration tests
。因此,我将编写一个 * 特性测试 *,向您展示您应该做的事情,因此请记住,我将编写假路由和工厂,这些路由和工厂可能与您设置的不同或甚至没有设置(我将使用
Laravel 8
和PHP 8
):我希望你能理解我在测试什么。如果你还有什么问题,请问。
此外,如果你能分享你的真实的代码,我可以和你一起写测试,并尝试让你的代码100%测试。