我遇到了在rails项目中测试块调用参数的问题。
我大约有这段代码(简化):
DropboxApi.read_path do |batch|
# some actions are here
end
批处理是数据的哈希值。
我有一个测试DropboxApi方法的rspec规范,我需要测试批量'的某些字段。我想得到这样的东西:
it { expect(batch).to respond_to(:data) }
it { expect(batch.data.count).to eq(6) }
我没有找到一些方法来做到这一点。在这种情况下,收益匹配器没有帮助,因为它们只检查块调用而不是它的参数。
有人可以帮助实现我想要的吗?我想我可能应该改变我的规范方法。但我还不知道如何。
答案 0 :(得分:3)
实际上它非常直接。
it "responds to data" do
DropboxApi.read_path do |batch|
expect(batch).to respond_to(:data)
end
end
it "has a count of 6" do
DropboxApi.read_path do |batch|
expect(batch.data.count).to eq(6)
end
end
如果你真的希望它看起来更简洁,就像你的例子一样,你可以做到以下几点。
let(:batch) {
DropboxApi.read_path do |batch|
return batch
end
}
it { expect(batch).to respond_to(:data) }
it { expect(batch.data.count).to eq(6) }
答案 1 :(得分:0)
从你的问题来看并不明显,但如果你需要的是在调用DropboxApi.read_path
时检查传递给块的参数,你可以简单地调用该API,并将传递给块的值保存到被检查:
let(:batch) {
res = nil
DropboxApi.read_path do |batch|
res = batch
end
res
}
it { expect(batch).to respond_to(:data) }
it { expect(batch.data.count).to eq(6) }