我正在尝试编写一个工具来衡量我们的功能规范所做的http请求数量(如果它们为0,我们可以将它们移到更便宜的javascript规范中)。
我遇到的问题是我不想识别在before(:each)块中发出的请求。我想在执行before(:each)块之后但在'it-block'执行之前将我的计数变量设置为0。
现在代码看起来像这样:
RSpec.configure do |config|
config.before(:each) do |test|
HTTPSpec::Counts= 0
end
WebMock.after_request do |request_signature, response|
HTTPSpec::Counts += 1
end
end
答案 0 :(得分:1)
这是一个可能适合你的黑客攻击:
require 'rspec'
$should_get_reset = 0
$should_not_get_reset = 0
# monkey-patch :before
module RSpec::Core::Hooks
alias_method :original_before, :before
def before(*args, &block)
original_before *args do
block.call
$should_get_reset = 0
end
end
# Alias :append_before to the new :before, because they do it here:
# https://github.com/rspec/rspec-core/blob/9f99b6aa24e24edd530035868e258abd24d88385/lib/rspec/core/hooks.rb#L201
alias_method :append_before, :before
end
describe "Hi" do
before do
$should_get_reset = 1
$should_not_get_reset = 1
end
it "mom" do
$should_get_reset += 1
$should_not_get_reset += 1
expect($should_get_reset).to eq(1)
expect($should_not_get_reset).to eq(2)
end
end
您可以将其保存在文件中(例如foo_spec.rb
)并运行rspec foo_spec.rb
以查看其是否有效。实际上,您可能希望将猴子修补程序移动到规范帮助程序或支持文件。