Come si specifica il comportamento di "sola lettura" di un modello?
-
22-08-2019 - |
Domanda
Ad esempio, diciamo che ho a Question
modello, che ha i campi booleani answered
E closed
.Come testerei il comportamento di un file Question should be read only when marked as answered
utilizzando RSpec?Sembra che sia il comportamento del modello, ma non sono sicuro di come testarlo al meglio.Dovrei utilizzare un filtro precedente per questo comportamento e aggiungere un errore che dice che non è possibile modificare una domanda con risposta?O c'è un modo migliore per farlo?Sto imparando solo RSpec e BDD.
Soluzione
dipende da come ti serve che funzioni, ma...
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 forse vuoi che l'errore venga generato durante il salvataggio?O forse non c'è alcun errore e semplicemente non cambia silenziosamente il valore?Dipende da te come vuoi implementarlo, ma la metodologia è la stessa.
- Imposta i tuoi oggetti nello stato in cui desideri specificarli
- Assicurati che i tuoi oggetti in quello stato facciano quello che ti aspetti
Quindi imposta una domanda con risposta e poi vedi se riesci a modificarne uno i suoi dati.Se non puoi, significa che le specifiche sono passate.Dipende da te come vuoi che funzioni il comportamento del tuo modello.E la cosa bella di BDD è che pensi prima a questa interfaccia, dal momento che devi effettivamente utilizzare un'API di oggetti per specificarla.