использование mocha js для модульного тестирования функции, которая принимает пользовательский ввод и ошибку - заглушка sinon TypeError - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь проверить следующую функцию. В качестве части своего выполнения функция получает данные из 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');
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...