【问题标题】:rSpec tests failing, checked everything I can think ofrSpec 测试失败,检查了我能想到的一切
【发布时间】:2013-08-14 16:38:07
【问题描述】:

我已经完成了我能想到的所有事情,但我无法弄清楚为什么我的大多数测试都失败了。

所有代码都在这个要点中:https://gist.github.com/rctneil/6232869

更新:

测试导致问题:

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

错误:

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

【问题讨论】:

  • 在此处发布相关代码,并创建一个最小的、可重现的失败场景。将问题隔离到实际代码的较小子集。如果您使用没有高度的过山车,像 height 验证这样的规格是否通过?
  • 这就是问题所在。我已经尝试缩小范围,但找不到任何直接有助于它的东西。如果我传入一个没有高度的过山车,所有高度验证都会失败。
  • 通过“缩小范围”我的意思是:创建一个具有显示不正确行为的单个属性的单个模型。该要点中的代码太多了,几乎是 500 行。
  • 那么,为它创建一个新的模型、测试、数据库表和工厂?

标签: ruby-on-rails testing rspec


【解决方案1】:

您有一个设置值的before_validation 回调。

这与 shoulda 匹配器的工作方式不符。在运行验证之前,匹配器将值设置为nil(或[],如果它是一个集合)。您的 before_validation 方法可以撤消该操作。

【讨论】:

  • 好的,但是为什么会导致问题呢?当然,这只是调整值?从 CSV 文件导入时,我需要那些给我正确的数据。
  • 当然它会调整值——在运行验证之前,它会将它们设置为除了应该匹配器设置的 nil 之外的其他值,因此这些属性中不能有无效值。 IMO 在验证之前这样做会破坏进行验证的目的;在您的导入过程中执行此操作。
  • 好的,谢谢您的建议。我已经删除了这两个回调,现在对 CSV 的导入进行这两项检查。我现在遇到问题的测试我已在我的 OP 底部发布了相关错误。
  • @rctneil 我建议为此打开一个新问题。当您这样做时,您需要描述您正在使用的数据库、您如何定义该列以及任何其他“隐藏”功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多