使用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。
我看了一些模仿本地条纹的存根宝石,但现在我在系统中添加了第四方。我宁愿不这样做,因为它似乎打败了测试的目的。