我正在尝试使用以下验证规则对我的方法进行单元测试
$rules = [
'image_id' => 'required|exists:images,id'
];
我的考试
$formData = [
'title' => 'test regulatory update',
'body' => 'test body',
'image_id' => 1000,
'file_id' => 3000,
'enforce_date' => '2018-01-01',
'region_id' => 4000
];
$trans = $this->getRealTranslator();
$v = new Validator($trans, array('image_id' => 1000), array('image_id' => 'exists:images,id'));
$validatorMock = Mockery::mock('Illuminate\Validation\PresenceVerifierInterface');
$validatorMock->shouldReceive('setConnection')->once()->with(null);
$validatorMock->shouldReceive('getCount')
->once()
->with('images', 'id', 1000, null, null, [])
->andReturn(true);
$v->setPresenceVerifier($validatorMock);
$response = $this->call('POST', '/regulatory', $formData);
$statusCode = $response->getStatusCode();
$this->assertEquals(200, $statusCode);
$this->assertTrue($v->passes());
运行测试时出现以下错误
testing.ERROR: exception 'Illuminate\Foundation\Validation\ValidationException' with message 'The given data failed to pass validation.'
我的问题是如何模拟验证以查看1000的图像ID存在?
答案 0 :(得分:0)
我用的是工厂。如果将其放在数据库/ factories / ModelFactory.php
中$factory->define(App\Image::class, function (Faker\Generator $faker) {
return [
'id' => $faker->number,
];
});
然后,您可以将image_id
数组中的form_data
更改为:
'image_id' => factory(App\Image::class)->create([
'id' => 1000
]),
工厂将生成数据库行,因此验证是否存在,将通过。
您在工厂发送的create方法包含的'id' => 1000
数组会覆盖工厂生成的数据。这意味着工厂生成ID为1000的图像行。