зависит от того, как вам это нужно, но ...
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 является то, что вы сначала задумываетесь об этом интерфейсе, поскольку для его спецификации необходимо использовать API объектов.