3

프로젝트에서 스트라이프를 사용하고 있습니다. Railscasts # 288 (http://railscasts.com/episodes/288-billing-with-stripe)을 가이드로 사용하고 있습니다. 사용자가 유효한 사용자 이름과 암호를 등록하면 Stripe 고객 계정을 만들게됩니다.통합 테스트는 스트라이프에서 테스트 사용자를 생성합니다. 중지 또는 스텁하는 방법

내 통합 테스트를 몇 번 실행 한 후 스트라이프 테스트 계정에서 많은 사용자를 만들었습니다. Stripe으로 Stripe 계정을 만들지 않고 일반 사용자처럼 내 등록 프로세스를 통과하도록 통합 테스트를 구성하려면 어떻게합니까?

+0

난 그냥 새로운 사용자에게 각각의 시간을 만들고, 지적 주기적으로 – AJcodez

답변

2

일반적으로 WebMock 같은 도구를 사용하여 HTTP 요청을 가로 채고 사용자가 제공 한 응답을 반환합니다. VCR gem은 WebMock (또는 선택적으로 FakeWeb)을 사용하여 HTTP 요청을 기록하고 재생함으로써이 프로세스를보다 쉽게 ​​만듭니다. VCR에는 Railscast가 있지만 약간 오래된 비디오입니다. filter_sensitive_data 구성 옵션을 사용하여 민감한 데이터 (예 : API 키)를 기록하지 않도록주의하십시오.

1

테스트를 가능한 한 현실적으로하지 않으면 서 실제로 통합을 테스트하기가 어렵습니다. 따라서 테스트 고객 계정을 스트라이프로 만들지 만 webhook을 사용하여 자동으로 삭제하도록 제안합니다.

특히 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에 부딪치게되면 나쁜 형태가 될 수 있지만 스트라이프는 그렇게 할 것이라고 가정합니다. –

관련 문제