【发布时间】:2014-12-15 01:46:29
【问题描述】:
我是 RSpec 的新手,正在深入研究。我希望测试一些琐碎的功能只是为了熟悉 RSpec DSL。所以,直截了当:我将如何使用 RSpec 的 3.1.7 语法测试以下代码片段?更具体地说,我如何测试一个函数是否被调用?
代码:
manipulate_loc(loc, op, n)
x = loc.x.send(op, n)
y = loc.y.send(op, n)
yield x, y
end
def scale_up(loc, n)
manipulate_loc(loc, :*, n)
end
测试:
it 'can scale up Locations' do
expect(scale_up(subject,2)).to receive(:manipulate_loc).with(subject, 2)
end
我知道这是一个奇怪的例子,因为我正在传递块,但是没有块的 ruby 会是什么!
【问题讨论】:
-
与测试无关,但你在哪里传递块?
manipulate_loc(loc, :+, n)不发送块,因此yield应该在此代码中失败。 -
@Amadan 你是对的,operated_loc 会产生一个块,而不是通过它......我对 Ruby 块的掌握仍然模糊,但它不会失败。它可以像这样使用:operated_loc(loc, :+, n){|x,y| ...},一切正常。我正在尝试使用块来操作 Ruby 对象,在本例中是具有 x 和 y 坐标的位置。