我有一个包含常量的模块,我想在测试套件的单元测试中使用这些常量。
我不明白的是,如果我包含模块,为什么常量不可用,但方法(如果我向模块添加任何方法)可用。
示例如下:
module Namespace
module Constants
K = 1
def mymethod; end
end
end
describe Namespace::Subject do
include Namespace::Constants
context "Context" do
it "should execute" do
mymethod # succeeds
K # fails
end
end
end
字符串
同样的原理也适用于控制台:
2.5.5 :008 > include Namespace::Constants
=> Object
2.5.5 :010 > K
=> 1
型
1条答案
按热度按时间6mw9ycah1#
在命名空间中定义的常量可以通过在命名空间中的常量前面加上前缀来调用。继承是在定义它的级别上。当你在一个新的模块或类中包含方法时,它们可以在定义它们的对象级别上调用。
K
在Ruby控制台中工作的原因是你在默认或全局范围内包含了它们。例如,如果你这样做了,你会得到不同的结果。字符串
这里有一个规格,也可以解释它
型
希望这说明了继承在Ruby中的工作方式。你面临的问题与Rspec本身无关。