Como você especifica o comportamento "somente leitura" de um modelo?
-
22-08-2019 - |
Pergunta
Por exemplo, digamos que eu tenho um Question
modelo, que tem os campos booleanos answered
e closed
. Como eu testaria o comportamento que uma pergunta should be read only when marked as answered
Usando RSPEC? Parece que é o comportamento do modelo, mas não tenho certeza de como testá -lo melhor. Devo usar um filtro antes para esse comportamento e adicionar um erro dizendo que você não pode modificar uma pergunta respondida? Ou existe uma maneira melhor de fazer isso? Estou apenas aprendendo RSPEC e BDD.
Solução
Depende de como você precisa funcionar, mas ...
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
Ou talvez você queira levantar o erro no SAVE? Ou talvez não haja erro e isso silenciosamente não altera o valor? Cabe a você como você deseja implementá -lo, mas a metodologia é a mesma.
- Configure seus objetos no estado em que você deseja especificá -los
- Verifique se seus objetos nesse estado fazem o que você espera
Portanto, configure uma pergunta respondida e veja se você pode alterar um dos seus dados. Se você não puder, então a especificação passou. Cabe a você como você deseja que o comportamento do seu modelo funcione. E o melhor do BDD é que você pensa nessa interface primeiro, já que você precisa usar uma API de objetos para especificá -la.