#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 будет использовать мою поддельную функцию вместо оригинальной реализации.