首页 > 解决方案 > Ruby RSpec 只为一个上下文定义 before/after 钩子

问题描述

我有以下 RSpec 测试结构:

RSpec.describe A do
  context C1 do
    it EX1a do
    end
    ....
    it EX1n do
    end
  end
  context C2 do
    it EX2a do
    end
    ...
  end
end

我现在要定义一个钩子,它只为上下文 C1 中的示例运行设置和关闭 wordk。我怎样才能做到这一点?根据我对hooks 结构的理解, usingbefore(:context)将在每个上下文(包括 C2)之前执行一次,而before(:example)将在每个示例之前执行一次(包括 EX2a),这不是我想要的。

我有 RSpec 3.8

标签: rubyrspec

解决方案


不完全是。这取决于您放置before积木的位置。当您将它们放在这样的上下文中时

RSpec.describe A do
  context C1 do
    before { do_something }

    it EX1a do
    end
    it EX1n do
    end
  end
  context C2 do
    it EX2a do
    end
  end
end

那么before回调只会在运行之前执行EX1aEX1n而不是之前执行EX2a

块类似before(:context)。从文档中引用:before(:context)在一组中的所有示例之前只运行一次”。一个context块定义一个group.


推荐阅读