¿Cómo te especializas a cabo un comportamiento de “sólo lectura” de un modelo?
-
22-08-2019 - |
Pregunta
Por ejemplo, digamos que tengo un modelo Question
, que tiene los campos booleanos answered
y closed
. ¿Cómo iba a probar el comportamiento que un should be read only when marked as answered
pregunta usando RSpec? Esto parece que es el comportamiento del modelo, pero no estoy seguro de cómo probar mejor ella. Debería ser el uso de un filtro antes de este comportamiento, y la adición de un error que indica que no se puede modificar una pregunta contestada? ¿O hay una mejor manera de hacerlo? Yo sólo estoy aprendiendo RSpec y BDD.
Solución
depende de cómo tiene que funcionar, pero ...
describe Question do
it "should be read only when marked as answered" do
question = Question.new(:title => 'old title')
question.answered = true
question.save
# this
lambda {
question.title = 'new title'
}.should raise_error(ReadOnlyError)
# or
question.title = 'new title'
question.save
question.title.should == 'old title'
# or
quesiton.title = 'new title'
question.save.should be_false
end
end
O tal vez desea que el error que se planteó al guardar? O tal vez no hay ningún error y que sólo en silencio no cambia el valor? Todo depende de cómo se desea implementar, pero la metodología es la misma.
- Configuración de los objetos en el estado que desea a las especificaciones ellos
- Asegúrese de que sus objetos en ese estado hacen lo que esperas
Así configurar una pregunta contestada, y luego ver si se puede cambiar una de sus datos. Si no puede, entonces Spec pasado. Todo depende de cómo desea que el comportamiento de su modelo funcione. Y la gran cosa acerca de BDD es pensar que esta interfaz en primer lugar, ya que se debe utilizar realmente una API objetos con el fin de spec a cabo.