Javascript NodeJS在jest测试中写入stdin
我有一个命令行应用程序,可以从Javascript NodeJS在jest测试中写入stdin,javascript,node.js,testing,integration-testing,jestjs,Javascript,Node.js,Testing,Integration Testing,Jestjs,我有一个命令行应用程序,可以从stdin读取用户输入: const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, }); rl.on('line', (line) => { doSomething(); }); 要编写集成测试,我需要能够写入stdin以激活'line'事件。但是,在我的测试用例中调用process.stdin.write(
stdin
读取用户输入:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
});
rl.on('line', (line) => {
doSomething();
});
要编写集成测试,我需要能够写入stdin
以激活'line'
事件。但是,在我的测试用例中调用process.stdin.write(`abc${os.EOL}')
会产生错误(因为流是单向只读的):
这个插座是关着的
我应该如何解决这个问题
是否是跳过命令行集成测试和仅测试
doSomething
的唯一选项?readline库是EventEmitter
之上的附加层
给定EventEmitter
是节点核心模块,它有自己的测试覆盖范围,而readline
有自己的测试覆盖范围-我将依靠这一点,不必担心匹配的bug
我只会编写测试来覆盖代码中的逻辑,
doSomething()
在本例中在我的案例中不会发生这种情况。我只是在try块中使用process.stdout.write。我是否做了一些与您所做的不同的事情?@Ammar这与process.stdout
无关。尝试process.stdin.write
。为什么需要写入stdin?为什么你不能简单地调用这个函数呢?只有在输入流暂停时才能执行stdin.write(rl.pause())@Ammar我需要模拟集成测试的'line'
事件。这似乎是不可能的:(