Как вы определяете поведение модели “только для чтения”?

StackOverflow https://stackoverflow.com/questions/525805

  •  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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top