Jest не использует макет для node_module? - PullRequest
0 голосов
/ 30 сентября 2019

Я издеваюсь над 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 голосов
/ 30 сентября 2019

Проблема заключалась в том, что у меня есть файл jsconfig.json, в котором я установил для baseUrl или корневого каталога папку / src. Это позволяет включить абсолютный импорт в моем реактивном проекте.

jsconfig.json

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

Jest настроен для поиска в корневом каталоге для каталога __mocks__, но, поскольку он находится в корневом каталоге, а не в /src, Jest не будет использовать макет.

Простое перемещение каталога __mocks__ в папку /src устраняет проблему.

...