31

配列に別の配列が含まれているかどうかをテストしようとしています(rspec 2.11.0)

test_arr = [1, 3]

describe [1, 3, 7] do
  it { should include(1,3) }
  it { should eval("include(#{test_arr.join(',')})")}
  #failing
  it { should include(test_arr) }
end    

これは結果ですrspecspec/ test.spec ..F

Failures:

  1) 1 3 7 
     Failure/Error: it { should include(test_arr) }
       expected [1, 3, 7] to include [1, 3]
     # ./spec/test.spec:7:in `block (2 levels) in <top (required)>'

Finished in 0.00125 seconds
3 examples, 1 failure

Failed examples:

rspec ./spec/test.spec:7 # 1 3 7 

include rspec mehod noは配列引数を受け入れませんが、「eval」を回避するためのより良い方法はありますか?

4

2 に答える 2

59

splat (*)演算子を使用するだけです。これは、要素の配列を、メソッドに渡すことができる引数のリストに展開します。

test_arr = [1, 3]

describe [1, 3, 7] do
  it { should include(*test_arr) }
end
于 2013-01-08T12:09:44.223 に答える
6

サブセット配列の順序をアサートする場合は、より少し多くのことを行う必要がありますshould include(..)。RSpecのincludeマッチャーは、すべての引数が順番に表示されるのではなく、各要素が配列の任意の場所に表示されることのみをアサートするためです。

each_cons次のように、サブ配列が順番に存在することを確認するために使用することになりました。

describe [1, 3, 5, 7] do
  it 'includes [3,5] in order' do
    subject.each_cons(2).should include([3,5])
  end

  it 'does not include [3,1]' do
    subject.each_cons(2).should_not include([3,1])
  end
end
于 2014-06-29T18:37:10.823 に答える