2

使用 RSpec,如果我按如下方式定义共享上下文:

shared_context :a => :b, :c => :d do
  # ...
end

metadata[:a] == :b如果是或,它将附加到示例组metadata[:c] == :d只有在两个条件都适用的情况下,是否有推荐的方法来附加上下文?

至于现在,我求助于将过滤器更改为:

shared_context :a => proc { |v, m| v == :b && m[:c] == :d } do
  # ...
end

但我无法想象这是正确的方法。

4

2 回答 2

3

元数据组件是经过设计的,并且没有一流的方法来处理您正在做的事情,所以这和任何方法一样好。

如果您对我们如何强制所有元数据匹配有一些想法,请在https://github.com/rspec/rspec-core/issues提交功能请求,我们可以讨论它。

于 2012-09-06T14:31:42.197 回答
0

我开始了我的 shared_context

shared_context "freeze time", workday: true, time: "19:00" do
 ...
end

但是在这种情况下,我重写了代码以使用单个元数据,例如

shared_context "freeze Time at workday after 18:00", workday_time: "19:00" do
  before{ 
    hours,minutes = "19:00".split(':')
    Timecop.freeze(Time.local(2013,04,01,hours.to_i,minutes.to_i)) 
  }
  after{ Timecop.return }
end

shared_context "freeze Time at weekend before 18:00", weekend_time: "10:30" do
  before{ 
    hours,minutes = "10:30".split(':')
    Timecop.freeze(Time.local(2013,04,06,hours.to_i,minutes.to_i)) 
  }
  after{ Timecop.return }
end
于 2013-04-04T08:50:12.283 回答