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我的代码。 我怀疑可能有更优越/更直接的方法。