質問

たとえば、私が持っているとします Question ブールフィールドを持つモデル answered そして closed. 。質問の動作をテストするにはどうすればよいですか should be read only when marked as answered RSpecを使用していますか?これはモデルの動作のようですが、最適なテスト方法がわかりません。この動作に対して before フィルターを使用し、回答された質問を変更できないことを示すエラーを追加する必要がありますか?それとももっと良い方法があるのでしょうか?私は 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 の素晴らしい点は、最初にこのインターフェイスについて考えることです。これを仕様化するには実際にオブジェクト API を使用する必要があるからです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top