我正在使用RSpec的VCR來單元測試一段API代碼,並且我遇到了一個小小的挑戰。如何判斷VCR是否處於錄製或播放模式?
我的客戶端代碼使用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
導出到塊的範圍內,或者將代理塊的執行導入我的測試範圍以創建存根。
有什麼想法?
注意:如果這有什麼區別(即,我沒有在每個單獨的API方法中明確包裝它自己的VCR塊),我在我的spec_helper.rb
中使用config.configure_rspec_metadata!
功能來自動捕獲/命名我的磁帶。
我使用VCR 2.9.3和VCR磁帶::。記錄?只有在record_mode爲:一次的情況下才有效。 – pduey