簡體   English   中英

js開玩笑的模擬類和靜態方法

[英]js jest mock classes and static methods

我為類編寫了模擬程序,並且在測試創建實例時一切正常,但在測試靜態方法時一切正常。 如何解決這個問題? 這是我的測試課:

class Order {
    async add(items) {
        const order = new OrderModel({items});
        await order.save();
        //...
    }

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

我的OrderModel模擬:

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
        };
    });
});

並測試這兩種方法:

//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()方法

那是因為對mockOrderModelfind被定義為對象的屬性,而不是靜態方法。 因此,基本上,您正在為必須在實例上調用的具有find屬性的Order創建一個模擬對象。 不模擬Order靜態方法。 為此,您可以嘗試:

Order.find = jest.fn()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM