Я пытаюсь написать модульный тест для хука Oclif, который содержит простое приглашение.Я хочу проверить вывод хука, получив ответ «Y» или «N» на приглашение.
import {Hook} from '@oclif/config'
import cli from 'cli-ux'
const hook: Hook<'init'> = async function () {
const answer = await cli.prompt("Y or N?")
if(answer === 'Y') {
this.log('yes')
}
else {
this.log('no')
}
}
export default hook
Я использую тестовые фреймворки 'fancy-test' и 'oclif / test', описанные здесь: https://oclif.io/docs/testing
Я попробовал заглушитьподсказка и имитация стандартного ввода, но ни одна из них не работает - либо функция-заглушка недоступна, либо вывод представляет собой пустую строку.
Вот попытка одного теста (не работает, потому что «cli.prompt не являетсяфункция '):
import {expect, test} from '@oclif/test'
import cli from 'cli-ux'
import * as sinon from 'sinon';
describe('it should test the "configure telemetry" hook', () => {
test
.stub(cli, 'prompt', sinon.stub().resolves('Y'))
.stdout()
.hook('init')
.do(output => expect(output.stdout).to.contain('yes'))
.it()
})
Мне пришло в голову, что я, вероятно, неправильно структурирую свой тест.Если кто-то может указать мне правильное направление или предоставить какой-нибудь псевдо / пример кода о том, как подойти к тестированию вышеописанного хука, это было бы удивительно - спасибо!