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 に答える