2017-01-09 87 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的圖像行。