使用Jest模拟Es6类

14 浏览
0 Comments

使用Jest模拟Es6类

我试图模拟一个带有接收参数的构造函数的ES6类,并在类上模拟不同的类函数以便进行测试,使用Jest。问题是我找不到任何关于如何解决这个问题的文档。我已经看过这篇帖子,但它并没有解决我的问题,因为OP实际上根本不需要模拟这个类!那篇帖子中的另一个答案也没有详细说明,没有指向任何在线文档,并且不会产生可重复的知识,因为它只是一段代码。

假设我有以下类:

//socket.js;
module.exports = class Socket extends EventEmitter {
    constructor(id, password) {
        super();
        this.id = id;
        this.password = password;
        this.state = constants.socket.INITIALIZING;
    }
    connect() {
        // 这个连接等等...
    } 
};
//__tests__/socket.js
jest.mock('./../socket');
const Socket = require('./../socket');
const socket = new Socket(1, 'password');
expect(Socket).toHaveBeenCalledTimes(1);
socket.connect()
expect(Socket.mock.calls[0][1]).toBe(1);
expect(Socket.mock.calls[0][2]).toBe('password');

很明显,我尝试模拟Socket和其中的类函数connect的方式是错误的,但我找不到正确的方法来做到这一点。

请在您的答案中解释模拟的逻辑步骤以及为什么每个步骤都是必要的,并尽可能提供Jest官方文档的外部链接!

谢谢帮助!

0