validation_inclusion_of rspec 测试用例返回 ArgumentError

validation_inclusion_of rspec test case is returning ArgumentError

提问人:piyush 提问时间:6/24/2023 最后编辑:piyush 更新时间:6/25/2023 访问量:105

问:

让我们考虑一个具有定义如下所示的类:

# a_type :string
class Foo < ActiveRecord::Base
    enum a_type: { fir: 'first', sec: 'second' }
    validates :a_type, presence: true, inclusion: { in: a_types.keys }
end

Rspec:

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

失败/错误:it { is_expected.to validate_inclusion_of(:a_type).in_array(Foo.a_types.keys) }

ArgumentError: “should've-matchers test string' 不是有效的a_type

这是预期的行为吗?请帮忙

我确实尝试从 should've-matcher 存储库中探索 ValidateInclusionOfMatcher,但找不到任何具体的东西。

目前尚不清楚为什么验证包含会失败,以及它如何首先根据主题进行检查,然后应用导致上述错误的ARBITRARY_OUTSIDE_STRING。

我的理解是,它应该检查上述行为,一个是使用 factorybot 将值传递给主题,另一个是通过将a_type替换为某个随机值来检查。

Ruby-on-Rails 验证 ruby-on-rails-6.1 应该匹配

评论

0赞 Schwern 6/24/2023
这有帮助吗?github.com/thoughtbot/shoulda-matchers/issues/1433
1赞 Schwern 6/24/2023
我认为它不喜欢你的枚举。似乎他们为多态关联修复了它,但可能不是枚举。是否需要对枚举进行包含验证?检查枚举是否已经强制执行。
0赞 piyush 6/25/2023
谢谢,好点子,当枚举用于列时,我将检查是否需要包含检查。我还检查了您之前提到的问题和 PR,但正如您所说,这是为了修复多态关联

答:

1赞 tyrro 6/25/2023 #1

您可以尝试将列名称更改为其他名称吗?该名称是为 STI 保留的,或者如果要保留它,请尝试覆盖继承列:type

self.inheritance_column = nil

话虽如此,错误消息确实令人困惑。shoulda-matchers

评论

0赞 piyush 6/25/2023
Type 更像是一个示例,您可以将其假定为 type1
0赞 piyush 6/25/2023 #2

无需验证或显式检查是否包含,因为为列定义的枚举会隐式执行此操作。

感谢@Schwern指出这一点