使用Stripe進行計費服務,效果很好。然而,測試有點痛苦。Rails 4,條紋:通過Rails環境條件顯示條紋數據?
我正在使用rspec/capybara,並進行了一些功能測試,訪問/settings
頁面,用戶可以通過該頁面更新其電子郵件,密碼和帳單信息(通過Stripe)。在開發和生產中,我想顯示Stripe API中的發票列表。但是,在測試模式下,我不想顯示發票,因爲它很昂貴,而且我沒有有效的客戶令牌來與Stripe API進行通信。
我的解決辦法是喜歡的東西:
# settings.html.erb view
<% unless Rails.env.test? %>
<% @invoices.each do |invoice| %>
# display info for the invoice...
<% end %>
<% end %>
這似乎只是「錯誤的」給我做一個有條件的Rails環境的方式。
的問題是,如果我執行,以條紋的API調用我必須確保我有有效的客戶/卡令牌與條紋通信,且價格昂貴,且依賴於第三方對我的測試。
我現在的做法是假定Stripe正在有效地測試它們的API,所以我只測試了傳遞給Stripe API的值。任何時候我顯示來自Stripe的數據,我都會在測試模式下跳過它。
這種類型的問題有沒有更清潔的解決方案?它應該與運行測試時可能使用的任何第三方API相同。
更新:2014年3月27日12:20
我考慮實際上正在創造有效的條紋客戶/卡令牌的點球時,我做我的一些特性測試另一件事。我被撕裂了,因爲我看到需要一個殘缺的更快的測試機制,但是如果我的測試實際上沒有執行相同的代碼,他們會在生產中做,我真的錯過了「工作代碼」部分。
我可能會標記我的rspec測試,使stripe API調用帶有「stripe」標籤,並且只在需要進行全面檢查(通常在主要提交或部署之前)時運行這些測試。
我想在某些時候,如果你真的要「測試」一些東西,那麼你必須接受懲罰,並像使用者一樣使用API。
我看了一些模仿本地條紋的存根寶石,但現在我在系統中添加了第四方。我寧願不這樣做,因爲它似乎打敗了測試的目的。