【问题标题】:Rails unit testing gone completely wrongRails 单元测试完全错误
【发布时间】:2009-06-30 07:31:08
【问题描述】:

我不知道我的代码发生了什么以及何时发生,但我遇到了数百个类似的错误(不是失败)

这个:

NameError: uninitialized constant ActiveSupport::Callbacks::Callback::NORMAL

而且我的测试功能现在变得毫无用处,甚至我也放了类似的东西:

should "failed" do
   assert false
end

它仍然返回通过,知道吗?

谢谢

【问题讨论】:

  • 请发布完整的堆栈跟踪。另请注意,应该不是标准的 Rails 方法,但它需要一个 GEM。

标签: ruby-on-rails ruby unit-testing activerecord


【解决方案1】:

问题已解决。

无论如何感谢您的帮助。

问题是未初始化的常量 ActiveSupport::Callbacks::Callback::NORMAL

我在模型中找到了一个验证

  validates_presence_of :time_purchased,         :if => "self.usage_type == NORMAL"

NORMAL 是我要检查的类型的字符串,在这个错误中,它真的很混乱,让我相信 ActiveSupport 有问题。

正确的应该是

validates_presence_of :time_purchased,         :if => "self.usage_type == 'NORMAL'"

【讨论】:

  • 发生混淆是因为 Ruby(或其中一个库)将“self.usage_type == NORMAL”通过 eval() 函数:它实际上执行字符串,因此它查找名为 NORMAL 的常量. ActiveSupport::Callbacks::Callback 是 Ruby 期望在当前上下文中找到常量的第一个位置。
  • 我强烈建议将此检查放入受保护的方法中,然后将该方法的名称(符号)提供给 ":if"。此外,您应该标记您的答案回答了您的问题。
  • 感谢 Mike 和 mislav,是的,它看起来是不变的,可能命名为 NORMAL,这很令人困惑。回复:mislav,我必须等待 48 小时才能接受我自己的答案。
猜你喜欢
  • 2017-03-07
  • 2015-02-24
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多