Há uma maneira de testar que o seu Controller irá receber exatamente o que você precisa, e isso você poderá fazer tanto antes de criar um Request (com TDD), ou após a criação para garantir que nada irá mudar!
Para testar você vai criar o seu teste normalmente:
use Tests\TestCase;
class CreateContactRequestTest extends TestCase
{
public function testEnsureAValidIdWilBePassed()
{
//
}
}
Após isso adicione o seguinte método setUp
:
public function setUp(): void
{
parent::setUp();
$request = new CreateContactRequest();
$this->rules = $request->rules();
$this->validator = $this->app['validator'];
}
Adicione também esses dois métodos para validação do Request:
protected function getFieldValidator($field, $value)
{
return $this->validator->make(
[$field => $value],
[$field => $this->rules[$field]]
);
}
protected function validateField($field, $value)
{
return $this->getFieldValidator($field, $value)->passes();
}
Por fim, teste os fields que serão passados:
public function testEnsureAValidIdWilBePassed(): void
{
$this->assertFalse($this->validateField('id', ''));
$this->assertFalse($this->validateField('id', null));
$this->assertTrue($this->validateField('id', 'any_id'));
}
Juntando tudo, teremos:
use Tests\TestCase;
class CreateContactRequestTest extends TestCase
{
public function setUp(): void
{
parent::setUp();
$request = new CreateContactRequest();
$this->rules = $request->rules();
$this->validator = $this->app['validator'];
}
public function testEnsureAValidIdWilBePassed()
{
$this->assertFalse($this->validateField('id', ''));
$this->assertFalse($this->validateField('id', null));
$this->assertTrue($this->validateField('id', 'any_id'));
}
protected function getFieldValidator($field, $value)
{
return $this->validator->make(
[$field => $value],
[$field => $this->rules[$field]]
);
}
protected function validateField($field, $value)
{
return $this->getFieldValidator($field, $value)->passes();
}
}
Prontinho! :D
Espero ter ajudado! Deixe seu like ;)
Top comments (0)