JavaScript – 使用JasminetestingNodeJS readline.createInterface的实现

我在NodeJS中构build了一个命令行应用程序,我想用Jasmine彻底地testing它。

我已经实现了一个promptUser()方法,它使用Node的readline.createInterface方法提出一个问题,并将回应传递给一个callback。 我想testing一下,给定一个' q '的用户响应,我的模块的quit()函数被调用。

不过我正在努力testing这个。 我真的不想直接testingreadline方法,因为我没有写代码,但我推断,如果我可以在process.stdout.write上创build一个监听器,那么当enter command:打印到屏幕上,我可以用process.stdin.write("q\n")回应并触发if / else逻辑。

我简化了代码,但是应该解释我正在做的事情:

模块源代码:

 var Cli = function() { var rl = require('readline'); var self = this; Cli.prototype.promptUser = function() { var inputHandler = rl.createInterface(process.stdin, process.stdout); inputHandler.question('enter command: ', function(answer) { if (answer === 'q') { self.quit(); }; }); }; Cli.prototype.quit = function() { // doSomething }; }; module.exports = Cli; 

茉莉花testing:

 var Cli = require('Cli'); describe('My application.', function() { beforeEach(function() { cli = new Cli(); spyOn(cli, 'quit'); }); describe('Cli #promptUser', function() { it('input of lower-case q calls cli.quit()', function() { process.stdout.once('write', function() { process.stdin.write("q\n"); }); cli.promptUser(); expect(cli.quit).toHaveBeenCalled(); }); }); }); 

我正在寻找使这种方法工作或find一个更好的方式来testing我的代码。 我怀疑可能有更优越/更直接的方法。