モデルの「読み取り専用」動作をどのように指定しますか?
-
22-08-2019 - |
質問
たとえば、私が持っているとします 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
それとも、保存時にエラーを発生させたいでしょうか?それとも、エラーはなく、黙って値を変更しないだけでしょうか?どのように実装するかはあなた次第ですが、方法論は同じです。
- オブジェクトを指定したい状態にセットアップします
- その状態のオブジェクトが期待どおりに動作することを確認してください
したがって、回答済みの質問を設定し、そのデータを変更できるかどうかを確認してください。それができない場合は、仕様は合格です。モデルの動作をどのように機能させるかはあなた次第です。そして、BDD の素晴らしい点は、最初にこのインターフェイスについて考えることです。これを仕様化するには実際にオブジェクト API を使用する必要があるからです。
所属していません StackOverflow