我需要为单元测试和集成测试的不同设置设置不同的设置。实施例
对于单元测试,我想做
WebMock.disable_net_connect!(:allow_localhost => true)
对于集成测试,我想做
WebMock.allow_net_connect!
此外,在开始集成测试之前,我想确保启动solr。因此我希望能够致电
config.before(:suite) do
SunspotStarter.start
end
但是,仅适用于集成测试。如果它是一个单元测试,我不想启动我的solr。
如何将配置分开?现在,我已经通过将我的集成测试保存在spec文件夹之外的文件夹中来解决这个问题,该文件夹有自己的spec_helper。还有更好的办法吗?
答案 0 :(得分:2)
我的解决方案可能有点hackish,但据我测试它应该有用。
我注意到config.include
采用type
参数,因此可能 ab 用于执行任意代码块,如下所示:
module UnitTestSettings
def self.included(base)
WebMock.disable_net_connect!(:allow_localhost => true)
end
end
module IntegrationTestSettings
def self.included(base)
WebMock.allow_net_connect!
RSpec.configure do |config|
config.before(:suite) do
SunspotStarter.start
end
end
end
end
Rspec.configure do |config|
config.include UnitTestSettings, :type => :model
config.include IntegrationTestSettings, :type => :integration
end
将它放在support文件夹中的一个文件中,你应该很高兴,尽管我还没有真正测试过代码。此外,我很确定有更好的方法来实现同样的目标。
答案 1 :(得分:2)
您可以使用与include语句相同的方式为前/后块指定类型。所以你可以做到以下几点:
RSpec.configure do |config|
config.before(:each, type: :model) do
WebMock.disable_net_connect!(:allow_localhost => true)
end
config.before(:each, type: :request) do
WebMock.allow_net_connect!
end
config.before(:suite, type: :request) do
SunspotStarter.start
end
end