Iterator应该使用错误消息Ruby,rspec

时间:2016-10-25 13:07:07

标签: ruby rspec

我应该从数组中返回奇数值,但如果我通过这个,我会继续在rspec中失败

odd_elements([1, 2, 3, 4, 5, 6]) { |x| x**2 }

我的代码看起来像这样

def odd_elements(array)
    array.values_at(* array.each_index.select {|i| i.odd?})
end

rspec中的代码是:

describe 'Odd iterator' do
 context 'should yield' do
  subject(:res) { odd_elements([1, 2, 3, 4, 5, 6]) { |x| x**2 } }
  it { is_expected.to be_an_instance_of Array }
  it { expect(res.size).to be 3 }
  it { expect(res[0]).to be 4 }
  it { expect(res[1]).to be 16 }
  it { expect(res[2]).to be 36 }
 end
end

我得到的错误是Odd iterator should yield should get 4(其他两个数字分别为16和36)。

有人可以告诉我,为什么大括号中的代码在传递给odd_modules之前没有被执行?

1 个答案:

答案 0 :(得分:1)

如果您定义odd_elements,则由您执行阻止。

def odd_elements(array)
  array.map! { |item| yield item } if block_given?
  array.select(&:odd?)
end

输出

2.3.1 :088 > odd_elements([1,2,3,4])
 => [1, 3] 
2.3.1 :088 > odd_elements([1,2,3,4]) { |x| x + 1 }
 => [3, 5]