3

我在一个项目上使用条纹。我使用 Railscasts #288 ( http://railscasts.com/episodes/288-billing-with-stripe ) 作为指南。我有它,一旦用户使用有效的用户名和密码注册,我将创建他们的 Stripe 客户帐户。

在运行了几次集成测试后,我可以看到在我的 Stripe 测试帐户中创建了许多用户。如何构建集成测试,以便它像典型用户一样完成我的注册过程,但不使用 Stripe 创建 Stripe 帐户?

4

4 回答 4

5

我来的有点晚了,但看看StripeMock。它是专门为此目的而制作的。

StripeMock.start
Stripe::Customer.create({
  id: '123',
  email: 'someone@something.com',
  card: 'void_card_token',
  subscriptions: {
    data: [{
      plan: {
        name: 'Some Subscription Plan',
        currency: 'usd',
        amount: 1000
      },
      start: 1410408211,
      status: 'active',
      current_period_start: 1410408211,
      current_period_end: 1413000211
    }]
  }
})

test... test... test...
StripeMock.stop
于 2014-09-19T19:29:22.467 回答
3

我通过使通过测试创建的所有客户在他们的电子邮件地址中具有“可删除”,并将这些行添加到我的 spec_helper 来解决这个问题。

config.after(:suite) do
  custs = Stripe::Customer.all(limit: 100).data
  custs.keep_if { |c| c.email.match( /deletable/ )  }
  custs.each { |c| c.delete }
end
于 2015-02-10T05:08:05.287 回答
2

这通常使用WebMock之类的工具来完成,该工具拦截 HTTP 请求并返回您提供的响应。VCR gem 通过在后台使用 WebMock(或可选的 FakeWeb)记录和重放 HTTP 请求使这个过程变得更容易。VCR 上有一个 Railscast,但它有点过时了。注意不要使用filter_sensitive_data配置选项记录任何敏感数据(即 api 密钥)。

于 2013-03-11T06:09:25.590 回答
1

如果不使您的测试尽可能真实,就很难真正测试集成。因此,我建议您让 stripe 创建测试客户帐户,但使用 webhook 自动删除它们。

具体来说,您将处理 customer.created 事件。如果 event->livemode == false,则向 api 发送请求以删除客户。

这样,您可以在测试时运行整个过程,同时只保留在实时模式下创建的客户。

于 2013-03-22T18:32:14.847 回答