2017-01-09 2 views
0

Ich versuche, meine Methode mit den folgenden ValidierungsregelnLarval Unittest Validierung

$rules = [ 
     'image_id' => 'required|exists:images,id' 
    ]; 

mein Test

$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()); 

Beim Ausführen von meinem Test ich folgende Fehlermeldung

testing.ERROR: exception 'Illuminate\Foundation\Validation\ValidationException' with message 'The given data failed to pass validation.' 

bekommen Unittest Meine Frage ist, wie kann ich die Validierung verspotten, um zu sehen, dass die Image-ID von 1000 existiert?

Antwort

0

Was ich dafür verwende, ist eine Fabrik. Wenn Sie diesen Ort in Ihrer Datenbank/Fabriken/ModelFactory.php

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

Dann können Sie Ihre image_id in Ihrem form_data Array dies ändern:

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

Eine Fabrik wird eine Datenbankzeile erzeugen, also wird die Validierung, wenn sie existiert, bestehen.

Das Array mit 'id' => 1000, das Sie mit der create-Methode gesendet haben, überschreibt die werkseitig generierten Daten. Das heißt, die Fabrik erzeugt eine Bildzeile mit der ID 1000.