Javascript CLI: как вызвать файл bin, чтобы я мог запускать интеграционные тесты с Jest - PullRequest
1 голос
/ 10 ноября 2019

Я создал интерфейс командной строки, который выполняет API-вызов в Google Книгах и позволяет пользователю искать книги по ключевому слову. Поиск возвращает список из пяти книг, включая идентификатор книги, который можно использовать для сохранения записи в списке чтения (записанном в локальном файле).

Я хотел бы создать несколько интеграционных тестов, но янеуверен в том, как «вызвать» программу, используя файл bin, который я настроил. В конце концов я хотел бы проверить, что пользовательский ввод дает правильный ответ от программы, но первое, что мне нужно проверить, это то, что начальная команда запускает программу.

Любая помощь очень ценится!

package.json

{
  ...

  "bin": {
    "books-cli": "bin/books-cli"
  },

  ...
}

bin / books-cli

#!/usr/bin/env node
require('../')()

index.js

module.exports = () => {
  const args = minimist(process.argv.slice(2));
  let command = args._[0] || 'help';

  if (args.help || args.h) {
    command = 'help';
  }

  if (args.version || args.v) {
    command = 'version';
  }

  switch (command) {
    case 'search':
      require('./commands/search')(args);
      break;
    case 'save':
      require('./commands/save')(args);
      break;
    case 'list':
      require('./commands/list')(args);
      break;
    case 'help':
      require('./commands/help')(args);
      break;
    case 'version':
      require('./commands/version')(args);
      break;
    default:
      console.error(
        `Sorry, "${command}" is not a valid command. Please type 'books-cli help' to see the help menu.`
      );
      break;
  }
};

1 Ответ

0 голосов
/ 10 ноября 2019

Вы можете получить имя двоичного файла из вашего package.json и создать child_process , а затем написать утверждения

, например (не проверено):

books-cli.spec.js
const { bin: { books-cli }} = require('package.json');
const { exec } = require('child_process');

describe('books-cli', () => {
  describe('help', () => {
    let error;
    let result;
    beforeAll(done => {
      exec(`${books-cli} help`, (err, stdout, stderr) => {
        error = stderr;
        result = stdout;
        // let jest know when the process finishes execution
        // so all the tests below will be run with error and 
        // result populated
        done();
      });
    });
    it('should not result an error', () => {
      expect(error).toEqual('.....');
    });

    it('should output helpful information', () => {
      expect(result).toEqual('....');
    });

    // describe the rest of the commands
    describe('search');
    describe('save');
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...