#javascript #unit-testing #jestjs #chalk
Вопрос:
Я использую мел для стилизации текста терминала и написал несколько вспомогательных функций для возврата chalk
экземпляров:
/* colorUtils.js */
const chalk = require("chalk");
function redUnderline(text) {
return chalk.red.underline(text);
}
function greenUnderline(text) {
return chalk.green.underline(text);
}
module.exports = { redUnderline, greenUnderline };
Чтобы протестировать вышеперечисленные функции, я использовал Jest для написания своего набора тестов:
/* colorUtils.test.js */
const chalk = require("chalk");
const { redUnderline, greenUnderline } = require("./colorUtils");
jest.mock("chalk", () => ({
green: {
underline: jest.fn(),
},
red: {
underline: jest.fn(),
},
}));
describe("colorUtils", () => {
describe("redUnderline", () => {
it("should return a red, underlined string", () => {
const result = redUnderline("foo");
expect(chalk.red.underline).toHaveBeenCalledWith("foo");
});
});
describe("greenUnderline", () => {
it("should return a green, underlined string", () => {
const result = greenUnderline("foo");
expect(chalk.green.underline).toHaveBeenCalledWith("foo");
});
});
});
Вышеуказанный набор тестов проходит без проблем.
Однако, чтобы проверить это chalk.red.underline
и chalk.green.underline
правильно вызвать, мне нужно имитировать chalk
использование jest.mock()
со следующим кодом:
jest.mock("chalk", () => ({
green: {
underline: jest.fn(),
},
red: {
underline: jest.fn(),
},
}))
Существует ли более компактный синтаксис jest.mock()
такого рода, чтобы он издевался над всеми chalk
методами экземпляра, чтобы стать jest.fn()
?
I tried using the following mock method:
jest.mock("chalk");
However, the first test will fail:
TypeError: Cannot read property 'underline' of undefined
2 |
3 | function redUnderline(text) {
> 4 | return chalk.red.underline(text);
| ^
5 | }