Быстрое тестирование Oclif
Я пытаюсь написать модульный тест для хука 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()
})
Мне пришло в голову, что я, вероятно, неправильно структурирую свой тест. Если кто-то может указать мне правильное направление или предоставить какой-нибудь псевдо / пример кода о том, как подойти к тестированию вышеописанного хука, это было бы удивительно - спасибо!
1 ответ
Вы пробовали с:
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', () => async () => 'Y')
.stdout()
.hook('init')
.do(output => expect(output.stdout).to.contain('yes'))
.it()
})
Заглушка с .stub(cli, 'prompt', () => async () => 'Y')
работал на меня