我必须在js中致电stripe.redirectToCheckout
(https://stripe.com/docs/js/checkout/redirect_to_checkout)才能将客户带到其条纹结帐页面。
我想使用cypress来测试结帐过程,但是当stripe.redirectToCheckout
导航到Stripe域上的页面时,由于cypress框架丢失,因此它无法处理条纹重定向。
我还想测试Stripe将我们重定向回成功或错误URL。
我知道测试外部站点被柏树(https://github.com/cypress-io/cypress/issues/1496)的人们视为“反模式”。但是在这种情况下,如何测试非常标准的Web流程(结帐)(使用非常流行和标准的付款服务,我会补充一下)?我不认为这是“反模式”。这是端到端测试的重要一步,Stripe专门为我们提供了用于此类测试的测试沙箱。
答案 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('/')
})
})
});