как написать модульный тест для fs.readdir

#unit-testing #jestjs

#модульное тестирование #jestjs

Вопрос:

Я хочу спросить, как написать модульный тест для этой функции. Я пытался издеваться над ним с помощью mock-fs, продолжая получать undefined результат. Извините, я новичок в JavaScript.

 async getAllSongs(): String[] {
  const songs = await readdir(this.storageDirectory);
  return songs;
}
  

Ответ №1:

Хорошо, похоже, что ваша функция является частью объекта / класса, но поскольку я не уверен на 100%, я буду использовать надуманный пример.

Предположим, что в моем sample.js файл, у меня есть какой-то код, например, так:

 //sample.js

const fs = require("fs").promises;

async function getAllSongs() {
  const songs = await fs.readdir(".");
  return songs;
}

module.exports = { getAllSongs };
  

Чтобы издеваться над fs.readdir, вы можете использовать jest.mock и заменить его функцией, которая возвращает обещание, поскольку это, по сути, то, что делает fs.readdir.

 //sample.test.js

const fs = require("fs").promises;
const { getAllSongs } = require("./sample.js");

fs.readdir = jest.fn(() => Promise.resolve(["lol.js", "lmao.js", "wow.txt"]));

test("tests stuff", async () => {
  const result = await getAllSongs();
  expect(result).toEqual(["lol.js", "lmao.js", "wow.txt"]);
});

  

Поскольку я отключился fs.readdir с помощью поддельной функции из jest, при getAllSongs выполнении jest будет использовать мою поддельную функцию вместо оригинальной реализации.