在 Mocha 测试中响应 NodeJS 提示

Respond to NodeJS prompt inside of Mocha test

我正尝试在 Mocha 中为我编写的命令行 NodeJS 应用程序编写一些测试。

Node 应用程序将提示用户输入 URL。然后它获取 URL,解析它以获得 CSS、JS 和图像文件,并将它们下载到各自的目录中。

我无法设置测试,因为应用程序依赖于用户输入,而且我不知道如何以编程方式将击键发送回提示符。

我的 URL 在 Node 应用程序中的请求基本上是这样的:

rl.setPrompt('Please enter URL: ');
  rl.prompt();
  rl.on('line', function(line) {
    url = line;
    rl.close();
  }).on('close', function(){
    request(url, function (error, response, body) {
      if (!error) {
        /* Do some stuff here */
      } else {
        throw new Error('Err making initial HTTP request. Attempted: '+url);
        return false;
      }
    });
  });

我的测试目前看起来像

var child = require('child_process');
var assert = require("assert");


describe('System', function(){
  before(function(){

  });
  it('should run successfully', function(){
    child.execSync('node index.js', function(error, stdout, stderr){
      //console.log(stdout);
    });
  });
});

测试电流立即失败,因为它不能 运行 没有用户输入。这应该是同步的吗?我只是找不到有关如何等待和响应提示的任何信息。

您需要提取一个可以实际测试的函数。所以它应该看起来像这样:

rl.setPrompt('Please enter URL: ');
rl.prompt();
rl.on('line', function(line) {
  url = line;
  rl.close();
}).on('close', function(){
  parseUrl(url); 
  });
});

...

function parseUrl(url){
  request(url, function (error, response, body) {
    if (!error) {
      /* Do some stuff here */
    } else {
      throw new Error('Err making initial HTTP request. Attempted: '+url);
      return false;
    }
}

现在您有了一个小函数 parseUrl,您可以非常轻松地对其进行测试。只要通过测试 URL 就大功告成了。