2017-06-24 111 views
1
validate :cannot_modify_if_locked, on: :update 


def cannot_modify_if_locked 
    if self.locked 
    errors.add(:locked_at, "#{self.locked_at} and cannot be modified") 
    false 
    end 
end 

RSPECRspec的軌道

consent_form = build(:consent_form, { locked_at: Date.today }) 
expect(consent_form.).to eq true 

這個測試是不好的。 如何寫這個測試?我需要在rspec上檢查這個驗證

+0

重新格式化代碼 –

+0

目前尚不清楚你想要達到的,代碼是無效的。你能在你的問題中用簡單的英語解釋嗎? –

+0

我forogot寫這個答案belove我幫助。問題解決了:) @seba – VladimirR

回答

0

在你的規範中,你可以使用let幫助記憶一個對象,你可以用它來「重新創建」一個沒有成功的更新,也就是說,必須無效。

假設你有你的模型,你可以創建一個擁有自己的屬性的記錄,也是lockedtruelocked_at屬性顯示在其被鎖定的日期:

RSpec.describe SomeModel, type: :model do 
    let(:some_object) { SomeModel.new(locked: true, locked_at: Time.now) } 

然後你可以let進入「創建」的對象,並嘗試執行更新它,那麼你可以使用預期來驗證它不會是有效的:

it 'invalid if object is locked' do 
    some_object.update(some_atttribute: 'Some new attribute') 
    expect(some_object).to_not be_valid 
end 

,你也能檢查驗證錯誤消息:

expect(some_object.errors[:locked_at].first).to eq("#{task.locked_at} and cannot be modified") 
相關問題