Я пытаюсь проверить следующую функцию. В качестве части своего выполнения функция получает данные из cli, используя inquierer.prompt()
.
module.exports.newRunner = async () => {
const config = require('../lib/config');
const auth = require('../lib/auth');
console.log('No Config found. Requesting new Runner ID');
if (!process.env.ADDRESS) {
const a = await inquirer.prompt([{
type: 'input',
message: 'Enter the runner api address',
name: 'address',
}]);
config.ADDRESS = a.address;
} else {
config.ADDRESS = process.env.ADDRESS;
}
config.save();
const res = await auth.checkAddress();
console.log('New Runner ID', res.id);
config.ID = res.id;
config.TOKEN = res.token;
config.save();
};
Мой тестовый код ниже. В нынешнем состоянии тесты пройдены правильно, но я должен вручную вводить url
при каждом запуске теста. Я пытаюсь sinon
заглушить inquierer.prompt()
и передать url
в качестве параметра. Это делается в хуке before()
. Я продолжаю получать сообщения об ошибках:
TypeError: prompt expected to yield, but no callback was passed. Received [[object Object]]
Я не уверен, что мне нужно передать в .yields()
для обратного вызова, все примеры, которые я видел, просто передают список параметров.
describe.only('Checking Components of newRunner()', () => {
let runnerStub;
before(async () => {
runnerStub = await exec('cd test/runner-gateway-stub/ && node index.js');
const inquirer = require('inquirer');
sinon
.stub(inquirer, 'prompt')
.yields([
{ type: null, message: null, address: 'http://localhost:5678' },
]);
});
it('', async () => {
const config = require('../lib/config');
const auth = require('../lib/auth');
const newRunner = require('../cli-commands/global-functions').newRunner;
const saveSpy = sinon.spy(config, 'save');
const checkAddressSpy = sinon.spy(auth, 'checkAddress');
await newRunner();
expect(saveSpy).to.have.been.called;
expect(checkAddressSpy).to.have.been.called;
expect(config.ADDRESS).to.be.a('String').and.to.not.be.empty;
saveSpy.restore();
checkAddressSpy.restore();
});
after(async () => {
runnerStub.kill('SIGHUP');
});
});