No estoy 100% seguro de que mi terminología esté bien aquí, pero lo que quiero hacer es lo siguiente. Logré simular con éxito stripe.customers.create creando una simulación manual como esta:
__mocks__/stripe.js class Stripe {} const stripe = jest.fn(() => new Stripe()); module.exports = stripe; module.exports.Stripe = Stripe;luego en mi unit.test.js importo el simulacro así
const { Stripe } = require("stripe"); Stripe.prototype.customers = { create: jest.fn(() => { return { id: "cus_testid", }; }), };Y el método stripe.customers.create() se burla muy bien. Sin embargo, el problema comienza cuando empiezo (a falta de una mejor palabra) "anidar" o "encadenar" los métodos más abajo en el objeto de la raya. Por ejemplo, este simulacro no funcionará:
Stripe.prototype.checkout.sessions = { create: jest.fn(() => { return { session: { url: 'someurl' } } }) }TypeError: no se puede establecer la propiedad 'sesiones' de indefinido
¿Por qué no puedo configurar un simulacro de método anidado y cómo debo abordar hacer un simulacro anidado? ¿Debo modificar el simulacro manual para lograr esto?
De acuerdo con el documento , la url es una propiedad inmediata del objeto Session, por lo que solo debe devolver {url: 'someUrl' } en lugar de envolverlo dentro de otra propiedad de session .
Por cierto, también te puede interesar stripe-mock , es un servidor HTTP simulado que responde como la API de Stripe real.