赛普拉斯测试条纹结帐

时间:2020-06-15 19:21:18

标签: javascript stripe-payments cypress stripe-checkout

我必须在js中致电stripe.redirectToCheckouthttps://stripe.com/docs/js/checkout/redirect_to_checkout)才能将客户带到其条纹结帐页面。

我想使用cypress来测试结帐过程,但是当stripe.redirectToCheckout导航到Stripe域上的页面时,由于cypress框架丢失,因此它无法处理条纹重定向。

我还想测试Stripe将我们重定向回成功或错误URL。

  1. 一旦我们导航到Stripe结帐,是否有任何方法可以迫使cypress重新连接到页面 -或-
  2. 有什么方法可以获取Stripe检出页面的URL,因此我们可以手动重定向,或者只是知道至少使用正确的参数调用了它。

我知道测试外部站点被柏树(https://github.com/cypress-io/cypress/issues/1496)的人们视为“反模式”。但是在这种情况下,如何测试非常标准的Web流程(结帐)(使用非常流行和标准的付款服务,我会补充一下)?我不认为这是“反模式”。这是端到端测试的重要一步,Stripe专门为我们提供了用于此类测试的测试沙箱。

3 个答案:

答案 0 :(得分:2)

e2e 测试具有外部依赖项(如 Stripe)的应用程序的一种常见方法是制作一个简单的模拟版本,然后将其应用于 e2e 测试。模拟也可以在开发过程中应用,以加快速度。

答案 1 :(得分:0)

我正在尝试改用条纹元素,因为它不会重定向并且让我可以更好地控制它。

答案 2 :(得分:-2)

这有帮助吗?

it(`check stripe redirection`, () => {
  cy.get('#payButton').click();
  
  cy.location('host', { timeout: 20 * 1000 }).should('eq', STRIPE_REDIRECT_URL);    

  // do some payment stuff here
  // ...
  // after paying return back to local
 

  cy.location({ timeout: 20 * 1000 }).should((location) => {
    expect(location.host).to.eq('localhost:8080')
    expect(location.pathname).to.eq('/')
  })

})

我用这个方法来测试keyCloak登录。这是有效的实际代码。

describe('authentication', () => {
  
  beforeEach(() => cy.kcLogout());

  it('should login with correct credentials', () => {
    cy.visit('/');

    cy.location('host', { timeout: 20 * 1000 }).should('eq', 'keycloak.dev.mysite.com:8443');

    // This happens on https://keycloak.dev.mysite.com:8443/auth/dealm/...
    cy.fixture('userCredentials').then((user) => {
      cy.get('#username').type(user.email);
      cy.get('#password').type(user.password);

      cy.get('#kc-login').click();

      cy.location({ timeout: 20 * 1000 }).should((location) => {
        expect(location.host).to.eq('localhost:8080')
        expect(location.pathname).to.eq('/')
      })
    })
  });