2017-01-09 59 views
0

我试图单元测试我的方法具有以下验证规则幼虫单元测试验证

$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

我用的是一个工厂。如果你把这个在你的数据库/工厂/ ModelFactory.php

$factory->define(App\Image::class, function (Faker\Generator $faker) { 
    return [ 
     'id' => $faker->number, 
    ]; 
}); 

然后你就可以改变你在你的form_data阵列image_id这样:

'image_id' => factory(App\Image::class)->create([ 
    'id' => 1000 
]), 

一个工厂会生成一个数据库行,所以验证是否存在,将通过。

包含'id' => 1000的阵列,与工厂的create方法一起发送,覆盖工厂生成的数据。这意味着工厂生成一个id为1000的图像行。