我正在使用带有 RSpec 的 VCR 对一段 API 代码进行单元测试,我遇到了一个小挑战。
我的客户端代码用于sleep
限制 API 请求的速率。多亏了这个优雅的解决方案,我现在可以sleep
从我的单元测试中截取带有存根的消息:
expect(subject).to receive(:sleep)
问题是,当我在开发这段代码时,我必须经常删除我的磁带,但是由于我已经存根sleep
,所以对真正的 API 请求没有速率限制,并且规范被炸毁了。
[我认为] 我想做的是如下所示:
expect(subject).to receive(:sleep) if !vcr.real_request?
这样sleep
我在录制磁带时就不会干扰被摄对象。
我看到了有趣的相关讨论,但这似乎是一个不同的案例,我不知道如何直接利用它。然而,这确实让我发现了 VCR 钩子(尤其是before_playback
),但我不清楚我将如何导出subject
到块的范围内,或者代理块执行到我的测试范围内以制作存根。
有什么想法吗?
注意:我正在使用我的config.configure_rspec_metadata!
功能spec_helper.rb
来自动捕获/命名我的磁带,如果这有什么不同的话(即我没有将每个单独的 API 方法明确地包装在它自己的 VCR 块中)。