我喜欢使用 RSpec 的 include 配置方法来包含模块 仅用于命名空间,这样我就不必为它们使用完全限定的名称 内部类和模块。这适用于 Ruby 1.9.2 中的 RSpec 2.11.0。但 现在在 Ruby 1.9.3 上这不再起作用了。我怎样才能让它重新工作?
这里有一个 foobar_spec.rb 的例子:
module Foo
class Bar
end
end
RSpec.configure do |config|
config.include Foo
end
describe Foo::Bar do
it "should work" do
Bar.new
end
end
如果您通过以下命令调用它:
rspec foobar_spec.rb
它将在 Ruby 1.9.2 中正常工作。但它会在 Ruby 1.9.3 中引发以下错误:
Failure/Error: Bar.new
NameError:
uninitialized constant Bar
最佳答案
这mailing list entry讨论了 1.9.3 中关于如何查找常量的根更改,所以它看起来像是一个有意的更改。
您可以像这样确定整个测试的范围:
module Foo
describe Bar do
it "should work" do
Bar.new
end
end
end
作为另一种解决方案,您可以将新对象的创建提取到 before
或 let
中,或者只将对象定义为 subject
测试。
关于ruby - 在 Ruby 1.9.3 中通过 RSpec 配置包含命名空间模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13042298/