【发布时间】:2015-09-20 08:54:04
【问题描述】:
我有一个模型,我在其中实施了验证以防止在设置初始值后发生更改。
它是这样工作的:
models/deal.rb
validate :quantity_not_changeable
def quantity_not_changeable
if quantity_changed? && self.persisted?
errors.add(:quantity,"Change of quantity is not allowed. Delete and re-create the deal.")
end
end
这适用于我的应用程序。但我正在尝试使用 Rspec 进行测试,但没有成功。
我尝试对此进行测试,但测试失败。
describe Deal do
let(:admin_user) { FactoryGirl.create(:admin_user) }
before(:each) do
@attr = {
title: "Neque porro quisquam est qui dolorem",
description: "lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum",
quantity: 10
}
end
describe "my test" do
it "fails if initial quantity is changed" do
msg_error = "Change of the initially defined qty is impossible"
hash = @attr.merge(quantity: 5)
deal = Deal.new(hash)
expect(deal).to have(1).errors_on(:quantity)
end
end
但我收到此 rspec 错误:
Failure/Error: expect(deal).to have(1).errors_on(:quantity)
expected 1 errors on :quantity, got 0
如何做到这一点并真正测试改变数量是不可能的?
编辑
我现在明白为什么测试失败了,但不知道如何处理。
如果我删除 self.persisted?从下面的代码中,我使用的测试通过了。所以问题出在持久化?
def quantity_not_changeable
if quantity_changed?
errors.add(:quantity,"Change of quantity is not allowed. Delete and re-create the deal.")
end
end
但我不想删除它,因为我确实需要它:我只想在字段已经有值时阻止更改它,所以我想忽略新记录。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 rspec