Подтвердить что ты не робот

Каким должен быть массив rspec? другой массив

Я пытаюсь проверить, содержит ли массив другой (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    

это результат   rspec spec/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 

Включить rspec mehod no принимает аргумент массива, лучший способ избежать "eval"?

4b9b3361

Ответ 1

Просто используйте оператор splat (*), который расширяет массив элементов в список аргументов, которые могут быть переданы в метод:

test_arr = [1, 3]

describe [1, 3, 7] do
  it { should include(*test_arr) }
end

Ответ 2

Если вы хотите утверждать порядок массива подмножества, вам нужно сделать немного больше, чем 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