如何使用rspec测试模块中的模块?

人1

我有这个设置

module A do
  module B do
     def foo
  end
end

在rspec内部,我正在尝试测试foo。

我的rspec文件是这样的

describe A::B do
  describe "#foo" do
    A::B.foo ...
  end 

end

我收到错误NoMethodError:A :: B:Module的未定义方法foo

有任何想法吗?

编码进化

首先,module A do语法似乎是错误的-不应有一个do单词。第二件事是您尝试在模块上调用foo方法A::B(没有在class上定义的类方法A::B-foo是实例方法)。您的代码应如下所示:

module A
  module B
    def self.foo
    end
  end
end

*(在这种情况下,您可以致电A::B.foo

或者,如果要使用foo作为实例方法,请执行以下操作:

module A
  module B
    def foo
    end
  end
end

在这种情况下,您不能调用A::B.foo,但是可以创建一个类,其中可以包括A::B模块:

class Test
  include A::B
end

现在您可以调用Test.new.foo

关于rspec测试:

  • 类方法:如您所描述
  • 实例方法:
    • 在您的规范中定义测试类,然后测试该类
    • 将此模块包含到您的rspec上下文中(丑陋的方式)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章