【发布时间】:2014-02-14 12:58:11
【问题描述】:
我正在使用 VCR 和 RSpec 对一段 API 代码进行单元测试,我遇到了一个小挑战。
我的客户端代码使用sleep 来限制API 请求。感谢this elegant solution,我现在可以从我的单元测试中截取带有存根的sleep 消息:
expect(subject).to receive(:sleep)
问题在于,在我开发此代码时,我必须经常删除我的磁带,但由于我已存根 sleep,因此对真正的 API 请求没有速率限制,并且规范崩溃了。
[我认为]我想做的事情如下:
expect(subject).to receive(:sleep) if !vcr.real_request?
这样我在录制磁带时不会干扰sleep 的对象。
我看到了有趣的related discussion,但它似乎是一个不同的案例,我不知道如何直接利用它。但是,这确实让我发现了 VCR 挂钩(尤其是 before_playback),但我不清楚如何将 subject 导出到块的范围内,或者代理块执行到我的测试范围内存根。
有什么想法吗?
注意:我正在使用我的 spec_helper.rb 中的 config.configure_rspec_metadata! 功能来自动捕获/命名我的磁带,如果这有什么不同的话(即我没有将每个单独的 API 方法明确地包装在它自己的 VCR 块中) .
【问题讨论】: