ruby-on-rails rspec测试用例的validation_inclusion_正在返回ArgumentError

yhived7q  于 2023-06-25  发布在  Ruby
关注(0)|答案(1)|浏览(123)

让我们考虑一个定义如下的类:

# type :string
class Foo < ActiveRecord::Base
    enum type: { first: 'first', second: 'second' }
    validates :type, presence: true, inclusion: { in: types.keys }
end

Rspec:

describe 'Validations' do
    it { is_expected.to validate_presence_of(:type) }
    it { is_expected.to validate_inclusion_of(:type).in_array(Foo.types.keys) }
end

失败/错误:它{ is_expected.to validate_inclusion_of(:type).in_array(Foo.types.keys)}
参数错误:“shoulda-matchers测试字符串”不是有效的类型
这是预期的行为吗?请帮帮忙
我尝试从shoulda-matcher repo探索ValidateInclusionOfMatcher,但找不到任何具体的东西。
目前还不清楚为什么验证包含会失败,以及它是如何首先根据主题进行检查,然后应用ARBITRARY_OUTSIDE_STRING导致上述错误的。
我的理解是,它应该检查上述行为,一个是使用factorybot在subject中传递值,另一个是通过将type替换为一些随机值。

cnwbcb6i

cnwbcb6i1#

你能试着把列名改成别的吗?名称type是为STI保留的,或者如果您想保留它,请尝试覆盖继承列:

self.inheritance_column = nil

也就是说,shoulda-matchers错误消息确实令人困惑。

相关问题