在rspec helper模块中添加`after`块

时间:2017-07-20 00:29:47

标签: ruby rspec

我在include块中有一个帮助模块RSpec.describe'。其中的大多数方法都与管理登录/注销状态有关,因此我想确保使用该帮助程序的任何内容自动清除全局状态以避免泄漏双打/模拟。

但我看到in the docs的每个示例似乎都只是添加辅助方法,而不是额外的before / after块。

我可以添加一个额外的after块,它不会覆盖辅助模块中的现有块吗?

2 个答案:

答案 0 :(得分:2)

如果我正确地理解你的问题,这样的事情应该可以解决问题。 (例如,添加了after块的链接上的第一个。)

<强> helpers.rb

module Helpers
  def help
    :available
  end

  def self.included(base)
    base.after(:each) do
      puts "after in helpers.rb"
    end
  end
end

<强> example.rb

require './helpers'
RSpec.configure do |c|
  c.include Helpers
end

RSpec.describe "an example group" do
  after(:each) do
    puts "After in example.rb"
  end

  it "has access to the helper methods defined in the module" do
    expect(help).to be(:available)
  end
end

然后运行它

$ rspec example.rb
# After in example.rb
# after in helpers.rb
# .
# Finished in 0.00196 seconds (files took 0.07939 seconds to load)
# 1 example, 0 failures

如果我误解了这个问题,请告诉我,我可以进一步澄清或改变这个例子

答案 1 :(得分:1)

答案是。测试中创建的每个before | after块都会在 Helper 文件的before | after块之前运行。

因此,阻止不会覆盖帮助块。