Rspec / shoulda: testing, que se llama un validador personalizado

Tengo un validador personalizado (ubicado en app/validators/uri_validator.rb) que se usa en:

validates :link, uri: true

¿Cómo especifico esto en mis especificaciones?

Idealmente, me gustaría tener una llamada de una línea, como:

it { should validate_uri_of(:link) }

¿Cómo hago esto?

preguntado el 12 de junio de 12 a las 11:06

2 Respuestas

Otra opción es usar el allow_value matcher, aunque no es ideal, puede funcionar en algunas circunstancias.

it { should allow_value(value_which_is_valid).for(:link) }
it { should_not allow_value(value_which_is_invalid).for(:link) }

Respondido el 25 de junio de 12 a las 14:06

Use factory girl para construir un objeto modelo con datos no válidos y uno con datos válidos y llame al comparador be_valid.

#factory girl
build(:model, link: valid_uri).should be_valid
build(:model, link: invalid_uri).should_not be_valid

Respondido el 12 de junio de 12 a las 14:06

Intento no acceder a la base de datos durante las pruebas cuando es posible. - Krn

Usando a la chica de la fábrica con build no llega a la base de datos, crea un modelo no guardado. - nmott

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.