我在嘲笑socket.io-client。
我在路径<root>/__mocks__/socket.io-client.js
中创建模拟文件
但是当我运行测试时,似乎并没有开玩笑地使用该模拟程序。我在做什么错了?
socket.io-client.js
let EVENTS = {};
function emit(event, ...args) {
EVENTS[event].forEach(func => func(...args));
}
const socket = {
on(event, func) {
if (EVENTS[event]) {
return EVENTS[event].push(func);
}
EVENTS[event] = [func];
},
emit
};
export const io = {
connect() {
return socket;
}
};
// to emulate server emit.
export const serverSocket = { emit };
// cleanup helper
export function cleanup() {
EVENTS = {};
}
export default io;
chat.test.js
import React from "react";
import mockio, { serverSocket } from "socket.io-client";
import Chat from "components/Chat";
import { render } from "@testing-library/react";
test("App should get messages", () => {
// first render the app
const utils = render(<Chat />); // then send a message
console.log(mockio);
serverSocket.emit("message", "Hey Wizy!");
expect(utils.getByText("Hey Wizy!")).toBeTruthy();
});
答案 0 :(得分:0)
问题是我有一个jsconfig.json文件,在其中我将baseUrl或根目录设置为/ src文件夹。这是为了在我的react项目中启用绝对导入。
jsconfig.json
{
"compilerOptions": {
"baseUrl": "src"
},
"include": ["src", "__mocks__"]
}
Jest已设置为在__mocks__
目录的根目录中查找,但是由于它位于根目录中,而不是/src
中,因此Jest不会选择该模拟。
只需将__mocks__
目录移动到/src
文件夹即可解决此问题。