Как вы определяете поведение модели "только для чтения"? - PullRequest
1 голос
/ 08 февраля 2009

Например, допустим, у меня есть модель Question, которая имеет логические поля answered и closed. Как бы я проверил поведение вопроса should be read only when marked as answered с использованием RSpec? Кажется, что это поведение модели, но я не уверен, как это лучше всего проверить. Должен ли я использовать фильтр перед этим поведением и добавить ошибку, говорящую, что вы не можете изменить ответ на вопрос? Или есть лучший способ сделать это? Я только изучаю RSpec и BDD.

1 Ответ

2 голосов
/ 09 февраля 2009

зависит от того, как вам это нужно, но ...

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

Или, возможно, вы хотите, чтобы при сохранении возникла ошибка? Или, может быть, нет ошибки, и она просто молча не меняет значение? Вам решать, как вы хотите это реализовать, но методология та же.

  1. Установите ваши объекты в том состоянии, в котором вы хотите их специфицировать
  2. Убедитесь, что ваши объекты в этом состоянии делают то, что вы ожидаете

Итак, задайте ответ на вопрос, а затем посмотрите, сможете ли вы изменить его данные. Если вы не можете, то спецификация пройдена. Вам решать, как вы хотите, чтобы поведение вашей модели работало. И отличительной особенностью BDD является то, что вы сначала задумываетесь об этом интерфейсе, поскольку для его спецификации необходимо использовать API объектов.

...