Я пытаюсь проверить несколько вещей внутри обратного вызова, который имеет дело с пользовательским вводом.Я использую модуль readline из nodejs
в Jest (аналогично примеру , приведенному в документации).Я не могу понять, как я могу сделать утверждения внутри этого обратного вызова.
Например: в рамках обратного вызова readline.createInterface().question()
я звоню writeFileSync
.Я хочу проверить как или , если вызывается writeFileSync
(или любая другая функция в обратном вызове).
// file.js
const { writeFileSync } = require('fs');
const readline = require('readline');
const copyFile = () => {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('What is the file name?', (userInput) => {
/**
* I want to some assertions on this function.
* For example: with which arguments was it called?
* Or how often is it called?
*/
writeFileSync();
});
}
И в тесте
//file.test.js
const { writeFileSync } = require('fs')
jest.mock('fs');
describe('copies files based on user input', () => {
test('calls writeFileSync', () => {
expect(writeFileSync).toHaveBeenCalled();
});
});
Самое близкое, что я получил:
// __mocks__/readline.js
module.exports = {
createInterface: jest.fn().mockReturnValue(
{
question: jest.fn().mockImplementation(
(question, cb) => {
writeFileSync()
}
)
}
)
}
Но с этим я тестирую тест, я заметил.Кто-нибудь знает, как я могу проверить, что находится внутри обратного вызова rl.question()
?Я с удовольствием предоставлю больше информации, если необходимо!