快速测试问题我有一个FizzBuzz实现,
def fizzbuzz(n)
(1..n).each do |num|
string = ''
string << 'Fizz' if num % 3 == 0
string << 'Buzz' if num % 5 == 0
string << 'Boom' if num % 7 == 0
string = num if string.empty?
puts string
end
end
我想为它写一个测试:
it 'should return the word Fizz for a number divisible by 3' do
expect(Thing.fizzbuzz(3)).to eq ("Fizz")
end
我得到了
Failure/Error: expect(@thing.fizzbuzz(3)).to eq ("Fizz")
expected: "Fizz"
got: 1..3
现在我知道实际结果更像是
1
2
'fizz'
但它让我思考如何写这个以便它很容易测试? 我可以将每个实例铲成一个数组,然后测试特定的位置,但有更好的方法吗?
答案 0 :(得分:2)
您当前的方法是puts
STDOUT的值。这使得很难测试。更改方法以将值作为数组返回。然后测试那个数组。
这样的事情:
def fizzbuzz(n)
(1..n).map do |num|
# logic here...
string
end
end
你的测试就变成了这个:
expect(@thing.fizzbuzz(3)).to eq [1, 2, "Fizz"]
或许这个:
expect(@thing.fizzbuzz(3)[2]).to eq "Fizz"