ruby - 在 Ruby 1.9.3 中通过 RSpec 配置包含命名空间模块

标签 ruby rspec namespaces ruby-1.9.3

我喜欢使用 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

作为另一种解决方案,您可以将新对象的创建提取到 beforelet 中,或者只将对象定义为 subject测试。

关于ruby - 在 Ruby 1.9.3 中通过 RSpec 配置包含命名空间模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13042298/

相关文章:

Ruby rspec 实时输出

ruby-on-rails - 找不到 capybara 的选择框

ruby-on-rails - 我应该用 Rspec 测试 Controller 助手还是 Controller 本身?

c# - 找不到类型或 namespace 名称 'register'

python - 如何访问 __main__ 范围内的全局变量?

javascript - Ruby json gem 正在编码 html 实体

ruby-on-rails - 查询多条记录时如何避免ActiveRecord::RecordNotFound异常

找不到php命名空间类 - Twig Composer

ruby-on-rails - Rails 解析 csv 分隔符¦

ruby - Rspec Array_extensions 类或实例方法