如何在Jest中模拟嵌套对象方法



我不能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。

最新更新