最近将一个代码库和gem一起升级到了rails4,现在我们得到了这个错误。
Failure/Error: it { is_expected.to ensure_inclusion_of(:usage).in_array(['Index', 'Slide', 'Body']).with_message("%{value} is not a valid usage") }
["Index", "Slide", "Body"] doesn't match array in validation下面是相关的模型代码
USAGES = ['Index', 'Slide', 'Body']
validates_inclusion_of :usage, :in => USAGES, :message => "%{value} is not a valid usage"我是不是漏掉了什么?我不明白为什么这会失败。
发布于 2015-07-30 04:18:15
validate_inclusion_of在内部使用allow_value。诚然,我们应该为您提供更好的错误消息,但您应该能够编写以下测试来找出发生了什么:
it { should allow_value("Index").for(:usage) }
it { should allow_value("Slide").for(:usage) }
it { should allow_value("Body").for(:usage) }
it do
should_not allow_value("something else").
for(:usage).
with_message("%{value} is not a valid usage")
end我的猜测是,应该匹配程序不会自动在失败消息中插入%{value}。如果这是真的,那么我要做的(在filing an issue之后)是将消息提取到一个i18n密钥,然后将该密钥的名称传递给with_message。
发布于 2017-07-13 01:10:58
对我来说很有效-
expect { should validate_inclusion_of(:usage).in?(['a', 'b']) }发布于 2015-05-09 02:34:45
你应该试试这个-
validates :usage, inclusion: { :in => %w( Index Slide Body ), :message => "%{value} is not a valid usage" }https://stackoverflow.com/questions/30130579
复制相似问题