shoulda-matchers 属性似乎不是模型的属性
shoulda-matchers attribute does not seem to be an attribute on model
我刚刚在 Rails 4.1 上从 2.8.0 升级到 shoulda-matchers 3.1.2,现在我的验证唯一性范围测试失败并显示此消息;
1) Invoice should validate that :invoice_no is case-sensitively unique within the scope of :ledger_id
Failure/Error: it { is_expected.to validate_uniqueness_of(:invoice_no).scoped_to(:ledger_id)}
Invoice did not properly validate that :invoice_no is case-sensitively
unique within the scope of :ledger_id.
:ledger_id does not seem to be an attribute on Invoice.
# ./spec/models/invoice_spec.rb:6:in `block (2 levels) in <top (required)>'
这是我的测试
require 'rails_helper'
RSpec.describe Invoice, :type => :model do
it { is_expected.to validate_uniqueness_of(:invoice_no).scoped_to(:ledger_id)}
it { is_expected.to validate_presence_of(:ledger_id)}
存在 :ledger_id 的测试通过。
这是我的模型
validates :ledger_id, presence: true
validates_uniqueness_of :invoice_no, scope: :ledger_id, case_sensitive: false
解决方法(我还在用机械师)
subject { Invoice.make!(ledger: Ledger.make!) }
it { is_expected.to validate_uniqueness_of(:invoice_no).case_insensitive.scoped_to(:ledger_id)}
我认为这是你的问题thoughtbot/shoulda-matchers
试试这个:
require 'rails_helper'
RSpec.describe Invoice, :type => :model do
is_expected = expect(create(:invoice))
it { is_expected.to
validate_uniqueness_of(:invoice_no).case_insensitive.scoped_to(:ledger_id)}
it { is_expected.to validate_presence_of(:ledger_id)}
我刚刚在 Rails 4.1 上从 2.8.0 升级到 shoulda-matchers 3.1.2,现在我的验证唯一性范围测试失败并显示此消息;
1) Invoice should validate that :invoice_no is case-sensitively unique within the scope of :ledger_id
Failure/Error: it { is_expected.to validate_uniqueness_of(:invoice_no).scoped_to(:ledger_id)}
Invoice did not properly validate that :invoice_no is case-sensitively
unique within the scope of :ledger_id.
:ledger_id does not seem to be an attribute on Invoice.
# ./spec/models/invoice_spec.rb:6:in `block (2 levels) in <top (required)>'
这是我的测试
require 'rails_helper'
RSpec.describe Invoice, :type => :model do
it { is_expected.to validate_uniqueness_of(:invoice_no).scoped_to(:ledger_id)}
it { is_expected.to validate_presence_of(:ledger_id)}
存在 :ledger_id 的测试通过。
这是我的模型
validates :ledger_id, presence: true
validates_uniqueness_of :invoice_no, scope: :ledger_id, case_sensitive: false
解决方法(我还在用机械师)
subject { Invoice.make!(ledger: Ledger.make!) }
it { is_expected.to validate_uniqueness_of(:invoice_no).case_insensitive.scoped_to(:ledger_id)}
我认为这是你的问题thoughtbot/shoulda-matchers
试试这个:
require 'rails_helper'
RSpec.describe Invoice, :type => :model do
is_expected = expect(create(:invoice))
it { is_expected.to
validate_uniqueness_of(:invoice_no).case_insensitive.scoped_to(:ledger_id)}
it { is_expected.to validate_presence_of(:ledger_id)}