【问题标题】:rspec for helper class expects module even though there is no module即使没有模块,帮助类的 rspec 也需要模块
【发布时间】:2013-06-18 00:20:59
【问题描述】:

我在我的 rails 项目 Foo 中添加了一个辅助类,位于 app/helpers/foo.rb。看起来像这样。

class Foo
   #....stuff
end

我在某些模型中使用它,一切正常。但是,在 spec/helpers/foo_helper_spec.rb 中,我有

require 'spec_helper'
describe Foo do
end

这会导致 rspec 崩溃(不报告任何失败的测试,但实际上是崩溃),说

/actionpack-3.2.12/lib/abstract_controller/helpers.rb:153:in `include': 错误的参数类型 Class (expected Module) (TypeError)

如果我删除了 describe 行并让文件为空,一切正常,但我想尽快添加一些测试。

有人知道我该如何解决这个问题吗?

谢谢。

【问题讨论】:

  • 你的班级读作“班级”。是错字吗?
  • 而助手一般都是模块。你必须定义为module Foo
  • @Vimsha,对不起,类是一个错字。在我的代码中是正确的。
  • 将其更改为模块,您的 rspec 应该可以正常工作
  • @Vimsha 你的意思是把类定义包围在一个模块中?

标签: ruby-on-rails rspec


【解决方案1】:

rails 遵循约定优于配置的范式。其中一个约定是,您将模块放入 helpers 文件夹中,因为它们会包含在您的控制器和视图中。

这就是为什么 rspec 在尝试包含您的模块时失败的原因,这实际上是一个类。

如果你需要在那里有一个真正的类,我认为你应该把它放在不同的目录中以使其明显,这不是一个通常的 rails helper!

例如,如果您正在为视图实现某种装饰器,请将其放在装饰器文件夹中。如果您正在为您的模型实现某种适配器,请将其放在模型文件夹或某个模型子文件夹中。

【讨论】:

  • 我没有意识到帮助者被区别对待。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 2020-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多