Применение общего контекста только тогда, когда все фильтры метаданных применяются с RSpec


С помощью 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
Но я не могу представить, что это правильный подход.
2 2

2 ответа:

Компоненты метаданных созданы или созданы по проекту, и нет первоклассного подхода к тому, что вы делаете, так что это не хуже любого другого.

Если у вас есть какие-то идеи о том, как мы могли бы обеспечить соответствие всех метаданных, пожалуйста, отправьте запрос на функцию по адресу https://github.com/rspec/rspec-core/issues и мы можем это обсудить.

Я начал свой 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