ruby - 如何使用 Ruby 在 RSpec 测试之间重新加载模块?

标签 ruby rspec module

我有一个可以像这样配置的模块:

module MyModule
   mattr_accessor :setting
   @@setting = :some_default_value
end

MyModule.setting = :custom_value

我正在使用 RSpec 测试不同的配置选项,发现设置在不同的测试之间保持不变,因为它们是类变量。

在 RSpec 测试之间重新加载和重新初始化模块的最佳方法是什么?

最佳答案

我想到了这个解决方案:

describe MyModule do

  before :each do
    # Removes the MyModule from object-space (the condition might not be needed):
    Object.send(:remove_const, :MyModule) if Module.const_defined?(:MyModule)

    # Reloads the module (require might also work):
    load 'path/to/my_module.rb'
  end

  it "should have X value" do
     MyModule.setting = :X

     expect(MyModule.setting).to eq :X
  end

end

来源:http://geminstallthat.wordpress.com/2008/08/11/reloading-classes-in-rspec/

关于ruby - 如何使用 Ruby 在 RSpec 测试之间重新加载模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17626123/

相关文章:

ruby-on-rails - rails, accepts_nested_attributes_for 示例

ruby-on-rails - 将 header 附加到 Rspec Controller 测试

ruby-on-rails - Rspec 在重定向后检查模板

c++ - 如何使用 C++ 在 Node 中编辑歌曲元数据?

ruby - 是否有命令行选项以某种模式在 emacs 中打开文件?

ruby-on-rails - 从 Controller 发送。需要帮忙

ruby-on-rails - 在 Rails 集成规范中向同一个 Controller 发出两个请求

python - 在多个项目中重用 Python 代码的首选方法是什么

python - 如何让 Python 在不手动修改 sys.path 的情况下选择正确的模块?

ruby - Puppet 中的字符串替换?