我不能100%确定我的术语是否正确,但我想做的如下。我成功地模拟了stripe.customers.create,创建了一个这样的手动模拟:
__mocks__/stripe.js
class Stripe {}
const stripe = jest.fn(() => new Stripe());
module.exports = stripe;
module.exports.Stripe = Stripe;
然后在我的unit.test.js中,我导入类似的mock
const { Stripe } = require("stripe");
Stripe.prototype.customers = {
create: jest.fn(() => {
return {
id: "cus_testid",
};
}),
};
stripe.customers.create((方法被模拟得很好。然而,当我开始(因为没有更好的词(";巢;或";链";方法进一步向下条纹对象。例如,这个模拟将不起作用:
Stripe.prototype.checkout.sessions = {
create: jest.fn(() => {
return {
session: {
url: 'someurl'
}
}
})
}
TypeError:无法设置未定义的属性"sessions">
为什么我不能设置这样一个嵌套的方法mock,以及我应该如何处理这样一个嵌入的mock?我应该修改手动mock来实现这一点吗?
根据文档,url
是Session对象的直接属性,因此您应该只返回{url: 'someUrl' }
,而不是将其包装在另一个session
属性中。
顺便说一下,你可能也对stripe-mock感兴趣,它是一个模拟HTTP服务器,它的响应就像真正的stripe API。