我在从测试中剔除条纹时遇到了一些麻烦
卡特顿。ts
import React from 'react'
import { loadStripe } from '@stripe/stripe-js'
import useCart from '~/state/CartContext'
import styles from './CartCheckoutButton.module.scss'
const stripePromise = loadStripe(process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY)
const CartCheckoutButton = ({}: TCartCheckoutButtonProps) => {
const { cartItems } = useCart()
const handleCheckOutOnClick = async (event) => {
const { sessionId } = await fetch('/api/checkout/session', {
method: 'POST',
headers: {
'content-type': 'application/json',
},
body: JSON.stringify({ cartItems }),
}).then((res) => res.json())
const stripe = await stripePromise
const { error } = await stripe.redirectToCheckout({
sessionId,
})
if (error) {
// TODO: Show some error message
console.log(error)
}
}
return (
<div className={styles.container}>
<button onClick={handleCheckOutOnClick} disabled={cartItems.length == 0}>
CHECKOUT
</button>
</div>
)
}
export default CartCheckoutButton
EndUserExperience.spec.js
import * as stripeJS from '@stripe/stripe-js'
describe('End user experience', () => {
beforeEach(() => {
cy.visit('http://localhost:3000/')
cy.stub(stripeJS, 'loadStripe').resolves(
new Promise(function (resolve, reject) {
resolve({
redirectToCheckout({ sessionId }) {
console.log(`redirectToCheckout called with sessionId: ${sessionId}`)
return new Promise(function (resolve, reject) {
resolve({ error: true })
})
},
})
})
)
})
it('Orders some dishes and makes a checkout', () => {
console.log('working on it')
})
})
当我点击周围它仍然重定向我。所以存根似乎没有起作用...
尝试@RichardMatsen建议的以下解决方案
import React from 'react'
import * as stripeModule from '@stripe/stripe-js'
import useCart from '~/state/CartContext'
import styles from './CartCheckoutButton.module.scss'
const stripePublishableKey = process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY
const CartCheckoutButton = ({}: TCartCheckoutButtonProps) => {
const { cartItems } = useCart()
// https://stackoverflow.com/questions/67565714/cypress-stub-out-loadstripe
const stripePromise = React.useCallback(() => {
window['stripeModule'] = stripeModule
return stripeModule.loadStripe(stripePublishableKey)
}, [stripeModule, stripePublishableKey])
const handleCheckOutOnClick = async (event) => {
const { sessionId } = await fetch('/api/checkout/session', {
method: 'POST',
headers: {
'content-type': 'application/json',
},
body: JSON.stringify({ cartItems }),
}).then((res) => res.json())
const stripe = await stripePromise()
const { error } = await stripe.redirectToCheckout({
sessionId,
})
if (error) {
// TODO: Show some error message
console.log(error)
throw error
}
}
return (
<div className={styles.container}>
<button onClick={handleCheckOutOnClick} disabled={cartItems.length == 0}>
TILL KASSAN
</button>
</div>
)
}
export default CartCheckoutButton
测验规格js
describe('End user experience', async () => {
beforeEach(() => {
cy.visit('http://localhost:3000/')
cy.window().then((win) => {
console.log(win)
cy.stub(win.stripeModule, 'loadStripe').resolves(
new Promise(function (resolve, reject) {
resolve({
redirectToCheckout({ sessionId }) {
console.log(`redirectToCheckout called with sessionId: ${sessionId}`)
return new Promise(function (resolve, reject) {
resolve({ error: true })
})
},
})
})
)
})
cy.intercept('GET', /.*stripe.*/, (req) => {
req.redirect('http://localhost:3000/checkout/success')
})
})
it('Orders some dishes and makes a checkout', () => {
console.log('working on it')
})
})
但它仍然重定向我并显示错误
Trying to stub property 'loadStripe' of undefined
据我所知,你不能通过在测试中导入一个方法的模块来在应用程序中存根它,看起来你得到了一个不同的“实例”。
请参阅最近的一个问题:如何在Cypress中存根模块,一种有效的方法是通过窗口
传递要存根的实例。
卡特顿。ts
import React, { useCallback } from 'react'
import * as stripeModule from '@stripe/stripe-js';
if (process.browser) { // this check needed for NextJS SSR
if (window.Cypress) {
window.stripeModule = stripeModule;
}
}
// const stripePromise = loadStripe(...) // need to defer this call
// from load time to runtime
// see useCallback below
// Maybe put this outside the React function,
// since dependencies shouldn't have property references
const stripeKey = process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY;
const CartCheckoutButton = ({}: TCartCheckoutButtonProps) => {
const stripePromise = useCallback(() => {
return stripeModule.loadStripe(stripeKey);
}, [stripeModule, stripeKey]);
EndUserExperience.spec.js
beforeEach(() => {
cy.visit('http://localhost:3000/')
.then(win => { // wait for app to initialize
const stripeModule = win.stripeModule;
cy.stub(stripeModule, 'loadStripe').resolves(...
})
构建默认的下一个应用程序
npx create-next-app nextjs-blog --use-npm --example "https://github.com/vercel/next-learn-starter/tree/master/learn-starter"
添加stripeModom引用和useCallback()到 /pages/index.js
import React, { useCallback } from 'react'
import * as stripeModule from '@stripe/stripe-js';
import Head from 'next/head'
if (process.browser) {
if (window.Cypress) {
window.stripeModule = stripeModule;
}
}
const stripeKey = process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY;
export default function Home() {
const stripePromise = useCallback(() => {
return stripeModule.loadStripe(stripeKey);
}, [stripeModule, stripeKey]);
return (
<div className="container">
...
添加一个基本测试
it('stubs loadStripe', () => {
cy.visit('http://localhost:3000/').then(win => {
const stripeModule = win.stripeModule;
cy.stub(stripeModule, 'loadStripe').resolves(
console.log('Hello from stubbed loadStripe')
)
})
})
建造,开始,测试
yarn build
yarn start
yarn cypress open
来自cy.stub()
的消息将打印到控制台。
我正在尝试使用JMX BulkLoader将数据从远程节点ETL到集群的Cassandra中 https://github.com/patrickcallaghan/datastax-analytics-example/blob/master/src/main/java/com/datastax/jmxloader/jmxbulkloader.java 但是在成功建立JMX连接之后,它似乎无法进行
摘星船是一个非常简单的小游戏,使用上下方向键控制飞船躲避陨石的同时多吃星星。 游戏内容很简单,但这是 WebAssembly 的游戏 Demo ,展示了 WebAssembly 编写使用 Web 渲染的游戏的能力。
本文向大家介绍甲、乙、丙三艘船共运货9400箱,甲船比乙船多运300箱,丙船比乙船少运200箱。求三艘船各运多少箱货?相关面试题,主要包含被问及甲、乙、丙三艘船共运货9400箱,甲船比乙船多运300箱,丙船比乙船少运200箱。求三艘船各运多少箱货?时的应答技巧和注意事项,需要的朋友参考一下 答案: 根据已知甲船比乙船多运30O箱,假设甲船同乙船运的一样多,那么甲船就要比原来少运300箱,结果三船运
我们有一个边带正权的有向图G(V,E),作为源顶点s,目标点T。此外,最短的s-t路径包括图中的每一个其他顶点。我需要计算s和t之间的交替最短路径距离,以防某些边e∈e被删除。我想设计一个O(e^2logV)算法,它计算图G\e中所有e∈e的最短S-T路径距离。最后的输出应该是一个大小为E的数组,其中edge E的条目应该包含G\E中最短的S-T路径距离。
在一个具有不同正边的无向图中,是否可能有一个MST与最短路径树没有公共边? 我一直试图引出不同的例子,但似乎这是不可能的。最短路径树中的最短路径边似乎也应该包括在MST中。
我的babel.config.js文件是: 你知道如何让与cucumber Cypress一起工作吗? 原始消息:我有一个test.feature文件,执行test.step.js文件中定义的步骤。以下是我的test.spec.js的内容 当我使用: 您可以在GitHub上签出我的项目:https://github.com/truar/cloudcmr-v2(传递情况为分支主,失败情况为分支pag