2016-03-07 87 views
0

*我是新来测试!使用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

在这个测试中,你将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(阵列))。到EQ new_set

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

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

谢谢!这正是我所需要的。欣赏它! – user3007294