Применение общего контекста только тогда, когда все фильтры метаданных применяются с 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 ответа:
Компоненты метаданных созданы или созданы по проекту, и нет первоклассного подхода к тому, что вы делаете, так что это не хуже любого другого.
Если у вас есть какие-то идеи о том, как мы могли бы обеспечить соответствие всех метаданных, пожалуйста, отправьте запрос на функцию по адресу 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