隔离测试,stub_const和模块

时间:2014-06-25 11:01:10

标签: ruby rspec

我有一个我想要的课程。该类包括一个我不想加载的模块。应用程序代码如下:

class Foo
  include Bar
  ...
end

在我的孤立规范中,我只需要foo.rb,但在这样做时,Ruby会尝试包含Bar模块常量,此时此类尚未定义。

Rspec提供了一个名为stub_const的方法,但它似乎打算在示例中使用,因此在示例后的清理时可以再次定义常量。

如果在示例之外调用stub_const,这显然不起作用。

解决此问题的最佳方法是什么?理想情况下,解决方案

  • 允许Rspec加载我的课程
  • 定义我选择的虚假模块
  • 运行示例,实例化现在包含伪模块的Foo类
  • 取消定义伪模块以返回原始状态

1 个答案:

答案 0 :(得分:0)

如何事先定义一个空(或存根)Bar模块呢?

使用foo.rb:

class Foo
  include Bar

  def to_s
    "Foo"
  end
end

这个foo_test.rb确实有效:

module Bar
end

require 'foo'

f = Foo.new

空模块需要在foo的要求之前出现,但是你可以在测试套件的特定文件中设置它(特别是如果你必须重复使用它)。