我在Rails验证器中有以下代码:
if object.channel && object.channel.requires_cvv? && object.cvv.blank?
object.errors[:cvv] << "InputDataMissingError: 'cvv' is missing"
end
验证器在模型中使用如下:
validates_with CreditCardValidator
RSpec版本是2.13.0,规格:
{
:card_number => { :invalid => %w(123 4200000000000001 999 JKJK dam$$%%§), :valid => %w(4200000000000000 5549112961922473 4556681898554 6011673896407010 3096807472914966 4916580675414755) },
:cvv => { :invalid => %w(444123 1 12 lplp $$$$$$ HUHUHUHU), :valid => %w(123 444) },
:remote_ip => { :invalid => %w(444123 1 12 lplp $$$$$$ 123.456.789.1/24), :valid => %w(0.0.0.1 127.0.0.1 123.456.789.1) }
}.each do |property, values|
values[:invalid].each do |invalid|
it{ should_not allow_value(invalid).for(property) }
end
values[:valid].each do |valid|
it { should allow_value(valid).for(property) }
end
end
失败很奇怪:
1) MyTransaction
Failure/Error: it{ should_not allow_value(invalid).for(property) }
NoMethodError:
undefined method `config' for #<MyTransaction:0x1102715a8>
# ./spec/models/transactions/my_transaction_spec.rb:20
这似乎是一个奇怪的RSpec加载问题错误,在开发/生产模式中看不到,仅在测试中。我没有这样的'config'方法。该错误是由简单的object.channel调用引起的,该调用只是尝试加载通道关联。请注意,在这种情况下,object.channel为nil。
有什么想法吗?我正在调试一些RSpec / Rails内部,但是我希望能节省几个小时,以及关于RSpec如何加载gems和其他Rails组件的良好链接/信息。
由于