首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >js jest模拟类和静态方法

问js jest模拟类和静态方法
EN

Stack Overflow用户
提问于 2018-08-03 21:33:13
回答 1查看 4.8K关注 0票数 2

我为我的类写了mock,当我测试创建实例时,一切都正常,但当我测试静态方法时,就不行了。如何解决这个问题?下面是我的测试类:

代码语言:javascript
复制
class Order {
    async add(items) {
        const order = new OrderModel({items});
        await order.save();
        //...
    }

    async find(items) {
        const query = OrderModel.find({
            //condition
        });
        //...
    }
}

我的OrderModel模拟:

代码语言:javascript
复制
const mockOrderModel = {
    save: jest.fn(),
    find: jest.fn(),
    exec: jest.fn()
};

jest.mock('../order/order.model', () => {
    return jest.fn().mockImplementation(() => {
        return {
            save: mockOrderModel.save,
            find: mockOrderModel.find,
            exec: mockOrderModel.exec
        };
    });
});

并对这两种方法进行测试:

代码语言:javascript
复制
//WORKS
it('add()', async () => {
    await order.add(['']);

    expect(OrderModel).toHaveBeenCalledTimes(1);
    expect(mockOrderModel.save).toHaveBeenCalledTimes(1);
});

//NOT WORKS
it('find()', async () => {
    await order.find(['']);

    expect(mockOrderModel.find).toHaveBeenCalledTImes(1);
});

未调用OrderModel.find()方法

EN

回答 1

Stack Overflow用户

发布于 2018-09-20 02:01:41

这是因为mockOrderModel上的find被定义为对象的属性,而不是静态方法。因此,基本上您是在为具有find属性的Order创建一个模拟对象,该对象必须在实例上调用。Order的静态方法不是模拟的。为此,您可以尝试:

Order.find = jest.fn()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51673838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档