使用RSpec测试Set对象

时间:2016-03-07 22:00:20

标签: ruby rspec

*我刚接触测试!

代码:

class SetTest

  def remove_duplicates(array)
      new_set = Set.new
      array.each {|number| new_set << number}
      new_set
  end

end

RSpec的:

describe SetTest do

  before(:each) do
    @new_set = SetTest.new
  end

  describe '#remove_duplicates' do
    it 'removes duplicates from an array' do
      array = [1,2,3,4,5,5,5,5,5,6,7,8,9,10]
      expect(@new_set.remove_duplicates(array)).to eql([{1,2,3,4,5,6,7,8,9,10}])
    end
  end

end

收到以下错误:

 syntax error, unexpected ',', expecting tASSOC (SyntaxError)...e_duplicates(array)).to eql({1,2,3,4,5,6,7,8,9,10})

然后,当我尝试这个时:

expect(@new_set.remove_duplicates(array)).to eql([1])

我明白了:

expected: [1]
got: #<Set: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}>

我知道如何测试这个吗?

*注意:我知道我可以使用.uniq!从数组中删除重复项。我只是用它来举例说明如何测试Set对象

1 个答案:

答案 0 :(得分:1)

在此测试中,您将Set对象与Array(其中包含错误的Hash)进行比较。

expect(@new_set.remove_duplicates(array)).to eql([{1,2,3,4,5,6,7,8,9,10}])

您需要在其中创建一个包含1..10的新集合并进行比较。

new_set =(1..10).to_set

并改变你的期望

期待(@ new_set.remove_duplicates(array))。到eq new_set

您还可以测试集合的长度,以确保它只包含预期数量的元素。

expect(@new_set.remove_duplicates(array).length).to eq 10