Ruby on rails rSpec测试失败,检查了我能想到的一切

Ruby on rails rSpec测试失败,检查了我能想到的一切,ruby-on-rails,testing,rspec,Ruby On Rails,Testing,Rspec,我已经经历了我能想到的一切,但我不明白为什么我的大多数测试都失败了 所有代码均在此要点中: 更新: 导致问题的测试: it { should ensure_inclusion_of(:on_ride_photo).in_array([true, false]) } 错误: 1) 过山车验证应确保将乘车照片包含在 [对,错] 失败/错误:它{应该确保在数组([true,false])中包含(:on_ride_photo) [true,false]与验证中的数组不匹配 #./spec/models

我已经经历了我能想到的一切,但我不明白为什么我的大多数测试都失败了

所有代码均在此要点中:

更新:

导致问题的测试:

it { should ensure_inclusion_of(:on_ride_photo).in_array([true, false]) }
错误:

1) 过山车验证应确保将乘车照片包含在 [对,错] 失败/错误:它{应该确保在数组([true,false])中包含(:on_ride_photo) [true,false]与验证中的数组不匹配 #./spec/models/coaster_spec.rb:96:in'block(3层)in'


您有一个设置值的
before\u validation
回调


这对shoulda matchers的工作方式没有好处。在运行验证之前,匹配器将值设置为
nil
(或者
[]
,如果它是一个集合)。在验证之前,您的
方法将撤消该操作。

在此处发布相关代码,并创建一个最小的、可重复的失败场景。将问题隔离到实际代码的较小子集。如果使用没有高度的过山车,像高度这样的规格是否通过验证?这就是问题所在。我试着缩小范围,但找不到任何与之直接相关的东西。如果我通过了一个没有高度的过山车,所有的高度验证都会失败。我所说的“缩小范围”是指:创建一个单一的模型和一个显示错误行为的单一属性。要点中的代码太多了,几乎有500行。所以,为它创建一个新的模型、测试、db表和工厂?好的,但为什么会导致问题?当然,这只是调整了值?当从CSV文件导入时,我需要它们为我提供正确的数据。当然,它会调整值——在运行验证之前,它会将它们设置为shoulda matcher设置的
nil
,因此这些属性中不能有无效值。IMO在验证之前这样做违背了进行验证的目的;在导入过程中执行此操作。好的,谢谢您的建议。我已经删除了这两个回调,现在在导入CSV时执行这两个检查。我现在遇到的测试有问题,我已经在我的OP底部发布了相关的错误。@rctneil我建议为此打开一个新问题。当您这样做时,您需要描述您正在使用的数据库、如何定义该列以及任何其他“隐藏”功能。