我想测试以下方法的输出:
def print_books
@books.each do |book|
puts "#{book.id}. #{book.name}"
end
end
我的RSpec代码如下:
before(:all) do
@library = Library.new
end
it "prints the correct names with ascendant ids" do
expect(STDOUT).to receive(:puts).with("4. Harry Potter","8. Lord of the Rings")
@library.print_books
end
问题是只打印了第一本书,因为我认为只考虑了第一本书。
答案 0 :(得分:1)
当您编写with(a, b)
时,您告诉RSpec您希望使用参数a, b
将该方法称为一次。例如,这将通过:
it 'prints' do
expect(STDOUT).to receive(:puts).with(1, 2)
puts 1, 2
end
你正在尝试做一些不同的事情;您希望使用puts
调用book_a
,然后使用book_b
再次调用 。您可以使用ordered
将其指定为RSpec。
it 'prints each book' do
expect(STDOUT).to receive(:puts).with('1. Harry Potter').ordered
expect(STDOUT).to receive(:puts).with('8. Lord of the Rings').ordered
@library.print_books
end
RSpec现在将检查puts
是先使用"1. Harry Potter"
,然后使用"8. Lord of the Rings"
。如果缺少一本书,则会出现第三本书,或者拨打错误的订单,测试将失败。