在 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 就大功告成了。
我正尝试在 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 就大功告成了。