Как вы определяете поведение модели “только для чтения”?
-
22-08-2019 - |
Вопрос
Например, допустим, у меня есть Question
модель, которая имеет логические поля answered
и closed
.Как бы я проверил поведение, о котором идет Речь should be read only when marked as answered
используя RSpec?Похоже, что это поведение модели, но я не уверен, как лучше всего это протестировать.Должен ли я использовать фильтр "до" для такого поведения и добавлять ошибку, в которой говорится, что вы не можете изменить ответ на вопрос?Или есть лучший способ сделать это?Я только изучаю RSpec и BDD.
Решение
зависит от того, как вам нужно, чтобы это работало, но...
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
Или, возможно, вы хотите, чтобы ошибка была вызвана при сохранении?Или, может быть, ошибки нет, и она просто молча не изменяет значение?Вам решать, как вы хотите это реализовать, но методология та же.
- Настройте свои объекты в том состоянии, в котором вы хотите их определить
- Убедитесь, что ваши объекты в этом состоянии делают то, что вы ожидаете
Итак, настройте вопрос с ответом, а затем посмотрите, можете ли вы изменить его данные.Если вы не можете, значит, спецификация пройдена.Вам решать, как вы хотите, чтобы поведение вашей модели работало.И самое замечательное в BDD то, что вы сначала думаете об этом интерфейсе, поскольку на самом деле вам нужно использовать objects API, чтобы определить его.