[英]Rspec rails on rails validation
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
RSPEC
consent_form = build(:consent_form, { locked_at: Date.today })
expect(consent_form.).to eq true
這個測試並不好。 怎么寫這個測試? 我需要在更新時檢查rspec這個驗證
在您的規范中,您可以使用let
helper來記憶對象,您可以使用它來“重新創建”一個不會成功的更新,也就是說,必須是無效的。
假設您擁有模型,您可以創建一個記錄,該記錄將具有其屬性並且還將locked
為true
,而locked_at
屬性則顯示其鎖定的日期:
RSpec.describe SomeModel, type: :model do
let(:some_object) { SomeModel.new(locked: true, locked_at: Time.now) }
然后,您可以使用let
訪問“created”對象並嘗試對其執行更新,然后您可以使用expect來驗證它是無效的:
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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.