Node.js 戏谑

Node.js 戏谑,node.js,testing,jestjs,Node.js,Testing,Jestjs,我想使用Jest测试我的nodejs代码。 在我的代码中,我使用stripe 当需要条纹时,您必须使用这条线 const stripe=require('stripe')("apikey"); 以便能够访问条带方法 显然,这就是我想嘲笑的图书馆,但如果我真的这么做了 jest.mock('stripe'); 我不能模仿我所需要的stripe方法,因为这就像不在高阶函数中传递密钥而执行require一样 我找不到任何关联 有没有办法做到这一点?我想您需要构建整个Stripe SDK模拟。这就是

我想使用Jest测试我的nodejs代码。 在我的代码中,我使用stripe

当需要条纹时,您必须使用这条线

const stripe=require('stripe')("apikey");
以便能够访问条带方法

显然,这就是我想嘲笑的图书馆,但如果我真的这么做了

jest.mock('stripe');
我不能模仿我所需要的stripe方法,因为这就像不在高阶函数中传递密钥而执行require一样

我找不到任何关联


有没有办法做到这一点?

我想您需要构建整个Stripe SDK模拟。这就是我的工作原理:

// Stripe SDK mock
jest.mock('stripe', () => {
    return jest.fn().mockImplementation(() => {
        return {
            skus: {
                retrieve: (sku, callback) => {
                    callback({}, {});
                }
            }
        };
    });
});
调用
stripe.skus.retrieve(req.query.sku,function(err,sku){…})时,上述模拟将返回空的
sku
对象

其余的也应该如此。如果希望此模拟根据输入返回不同类型的数据,则需要在模拟中实现该逻辑


希望这有帮助,

我已经找到了一个解决方案,只需分配stirpe.element.function=jest.fn().mockReturnValue(Promise.resolve(value))