减少RSpec中的代码重复

时间:2011-03-29 18:58:12

标签: ruby rspec

我有一个包含大约20个ExampleGroups的rspec测试(由'describe'关键字定义)。每个ExampleGroup都包含一个在每个示例之后调用的'after'方法。

describe "grouping" do
  include Common
  after do
    after_example
  end
end

在此测试中,'after'方法在所有20个ExampleGroup中是相同的。目前,我只是使用mixin来避免重复代码,但总是必须指定'after'子句并且应该在每个ExampleGroup中调用mixin似乎是多余的。

有没有办法做到这一点所以我不必在每个ExampleGroup中指定'after'?

2 个答案:

答案 0 :(得分:4)

好吧,这些示例组都有相同的后方法,它们是否以某种方式相关?因为那时您可以将组嵌套在父级下。

describe "parent grouping" do
  include Common
  after do
    after_example
  end

  describe "child 1" do
    pending
  end

  describe "child 2" do
    pending
  end

  ...
end

RSpec将在子块之前/之后运行父分组,并为其提供mixin。

答案 1 :(得分:0)

您也可以编写模块,以便自动添加后块:

module Common
  def included(base)
    base.after do
      # add shared "after" logic here
    end
  end
end

describe 'a spec' do
  include Common
  # no need to add the after logic, since it got added on 'include'
end