开玩笑没有为节点模块使用模拟吗?

时间:2019-09-30 02:05:00

标签: reactjs socket.io jestjs babel-jest

我在嘲笑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();
});

1 个答案:

答案 0 :(得分:0)

问题是我有一个jsconfig.json文件,在其中我将baseUrl或根目录设置为/ src文件夹。这是为了在我的react项目中启用绝对导入。

jsconfig.json

{
  "compilerOptions": {
    "baseUrl": "src"
  },
  "include": ["src", "__mocks__"]
}

Jest已设置为在__mocks__目录的根目录中查找,但是由于它位于根目录中,而不是/src中,因此Jest不会选择该模拟。

只需将__mocks__目录移动到/src文件夹即可解决此问题。