3

我在项目上使用条带。我使用Railscasts#288(http://railscasts.com/episodes/288-billing-with-stripe)作为指南。我拥有它,以便一旦用户注册了有效的用户名和密码,我将创建他们的Stripe客户帐户。集成测试在Stripe上创建测试用户,如何停止或停用

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

+0

我刚刚创建一个新用户每次,并清除所有的测试数据定期 – AJcodez 2013-03-11 05:01:54

回答

2

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

1

很难真正地测试集成,而不会使测试尽可能逼真。因此,我建议你让条纹创建测试客户帐户,但利用webhooks自动删除它们。

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

通过这种方式,您可以在测试时贯穿整个过程,同时只保留在实时模式下创建的客户。

5

我来了一点晚,游戏,但检查出StripeMock。它是专门为此目的而制作的。

StripeMock.start 
Stripe::Customer.create({ 
    id: '123', 
    email: '[email protected]', 
    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 
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 
+0

值得注意的是,条纹员工告诉我,他们希望他们的客户想要直接测试。所以虽然通常它可能是一个糟糕的形式,让你的规格碰到实际的api,条纹假设你会这样做。 – 2015-03-19 19:21:52