Comment trouvez-vous spec sur le comportement « lecture seule » d'un modèle?
-
22-08-2019 - |
Question
Par exemple, disons que j'ai un modèle Question
, qui a les champs booléens answered
et closed
. Comment puis-je tester le comportement d'un should be read only when marked as answered
Question à l'aide RSpec? Cela semble que c'est le comportement du modèle, mais je ne suis pas sûr de savoir comment tester mieux il. Dois-je utiliser un filtre avant de ce comportement, et en ajoutant une erreur disant que vous ne pouvez pas modifier une réponse à votre question? Ou est-il une meilleure façon de le faire? Je ne RSpec apprentissage et BDD.
La solution
dépend la façon dont vous avez besoin travailler, mais ...
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 peut-être que vous voulez que l'erreur soit soulevée lors de l'enregistrement? Ou peut-être il n'y a pas d'erreur et juste ne change pas en silence la valeur? Il vous est à la façon dont vous voulez la mettre en œuvre, mais la méthodologie est la même.
- Configurez vos objets dans l'état que vous voulez les spec
- Assurez-vous que vos objets dans cet état font ce que vous attendez
configurer une réponse à votre question, puis voir si vous pouvez changer ses données. Si vous ne pouvez pas, SPEC puis passé. Il est à vous comment vous voulez travailler le comportement de votre modèle. Et la grande chose au sujet BDD est vous penser à cette première interface, puisque vous devez réellement utiliser une API d'objets afin de spec dehors.