2017-01-09 7 views
0

Я пытаюсь UnitTest моего метода со следующими правилами проверокличиночной UnitTest проверки

$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 существует?

ответ

0

Что я использую для этого завода. Если вы поместите это в базе данных/фабрики/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 
]), 

заводском будет генерировать строку базы данных, поэтому проверка, если она существует, пройдет.

Массив, содержащий 'id' => 1000, который вы отправили вместе с методом create на фабрике, переопределяет заводские данные. Это означает, что завод генерирует строку изображения с идентификатором 1000.