2016-06-30 6 views
0

rspecテストでは、繰り返しを避けるために2つの異なるクラスの共有テストを実装したいと思います。テストはオブジェクトfoobarに対して実行されます。予想通りfoobarFOOBARの宣言時に利用できないので、これは動作しませんrspecテストケースでオブジェクトを反復する

let(:foo) { create(:foo) } 
let(:bar) { create(:bar) } 

FOOBAR = { 
    "foo" => foo, 
    "bar" => bar 
} 

describe 'POST :id/foobar_type/:foobar_id/do' do 
    FOOBAR.each do |foobar_type, foobar| 
    it 'creates something on an foobar' do 
    end 

    it 'raises an error if unauthorized' do 
    end 

    ... 
    end 
end 

:私のテストでは、以下の構造を有しています。これらは、itブロック中にのみ有効です。どのようにこのようなテストパターンを実装できますか?

+1

あなたはRSpecの内の共有行動の機能を使用してみましたか? – MageeWorld

答えて

1

shared_examplesをご覧ください。やや抽象例えば

あなたが与えた:

RSpec.shared_examples 'good foobar' do |foobar| 
    it 'creates something on a foobar' do 
    end 

    it 'raises an error if unauthorized' do 
    end 
    ... 
end 

あなたは、このような共有の例を呼び出すことができます。

describe 'POST :id/foobar_type/:foobar_id/do' do 
    it behaves_like 'a good foobar' foo 
    it behaves_like 'a good foobar' bar 
end 
0

あなたはFOOBAR非定数を作成することができるならば、あなたは私があなたを考えていない定数(と、それを維持したいならば、あなたは、

let(:foobar) { 'foo' => foo, 'bar' => bar } 

など、それを定義することができますそれはfoobarの値に依存し、それらが一定ではないため)すべき

before do 
    FOOBAR = { 'foo' => foo, 'bar' => bar } 
end 
関連する問題