¿Cómo te especializas a cabo un comportamiento de “sólo lectura” de un modelo?

StackOverflow https://stackoverflow.com/questions/525805

  •  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.

¿Fue útil?

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.

  1. Configuración de los objetos en el estado que desea a las especificaciones ellos
  2. 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top