gpt4 book ai didi

ruby - Rspec:有没有办法在 before(:each) block 之后但在实际的 it block 之前执行代码?

转载 作者:太空宇宙 更新时间:2023-11-03 16:22:44 25 4
gpt4 key购买 nike

我正在尝试编写一个工具来衡量我们的功能规范发出的 http 请求量(如果它们发出 0,我们可以将它们转移到更便宜的 javascript 规范)。

我遇到的问题是我不想识别在 before(:each) block 中发出的请求。我想在执行 before(:each) block 之后但在执行“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

最佳答案

这里有一个可能对你有用的技巧:

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 以查看它的工作情况。在实践中,您可能希望将您的猴子补丁移动到规范帮助程序或支持文件。

关于ruby - Rspec:有没有办法在 before(:each) block 之后但在实际的 it block 之前执行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31165323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com