簡體   English   中英

Rspec軌道在軌道驗證

[英]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來記憶對象,您可以使用它來“重新創建”一個不會成功的更新,也就是說,必須是無效的。

假設您擁有模型,您可以創建一個記錄,該記錄將具有其屬性並且還將lockedtrue ,而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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM