*我刚接触测试!
代码:
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对象
答案 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