I created a custom validation rule in Laravel, extending it in the register()
method of a service provider, and I'd like to test it, but don't know how.
I took a look at Laravel framework's validation tests, but I couldn't understand the purpose of the getTranslator()
and getRealTranslator()
methods.
Could someone give me a hint on how to test Laravel's custom validation rules?
EDIT
That's what I did:
Created a ValidatorServiceProvider
as follows:
<?php namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ValidatorServiceProvider extends ServiceProvider {
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
$this->app['validator']->extend('greater_than', function($attr, $val, $params)
{
return false;
});
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
}
}
Also added it to the providers array and issued composer dump-autoload -o
.
Added the following to tests\CustomValidationRulesTest.php
:
<?php
use Mockery as m;
use Illuminate\Validation\Validator;
class CustomValidationRulesTest extends TestCase {
public function tearDown()
{
m::close();
}
public function testValidateGreaterThan()
{
$trans = $this->getTranslator();
$rules = [
'field2' => 'greater_than:field1'
];
$data = [
'field1' => 1,
'field2' => 2
];
$v = new Validator($trans, $data, $rules);
$this->assertTrue($v->passes());
}
protected function getTranslator()
{
return m::mock('Symfony\Component\Translation\TranslatorInterface');
}
protected function getRealTranslator()
{
$trans = new Symfony\Component\Translation\Translator('en', new Symfony\Component\Translation\MessageSelector);
$trans->addLoader('array', new Symfony\Component\Translation\Loader\ArrayLoader);
return $trans;
}
}
Running PHPUnit gives me the following:
PHPUnit 4.6.6 by Sebastian Bergmann and contributors.
Configuration read from /home/ubuntu/workspace/phpunit.xml
E.
Time: 248 ms, Memory: 14.75Mb
There was 1 error:
1) CustomValidationRulesTest::testValidateGreaterThan
BadMethodCallException: Method [validateGreaterThan] does not exist.
/home/ubuntu/workspace/vendor/laravel/framework/src/Illuminate/Validation/Validator.php:2615
/home/ubuntu/workspace/vendor/laravel/framework/src/Illuminate/Validation/Validator.php:372
/home/ubuntu/workspace/vendor/laravel/framework/src/Illuminate/Validation/Validator.php:372
/home/ubuntu/workspace/vendor/laravel/framework/src/Illuminate/Validation/Validator.php:325
/home/ubuntu/workspace/tests/CustomValidationRulesTest.php:27
What I'm doing wrong?
Thanks!