【问题标题】:NodeJS write to stdin in jest testsNodeJS 在开玩笑测试中写入标准输入
【发布时间】:2019-02-27 00:40:33
【问题描述】:

我有一个从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 的唯一选项吗?

【问题讨论】:

  • 这在我的情况下没有发生。我只是在 try 块中使用 process.stdout.write 。我做的事情和你做的不一样吗?
  • @Ammar 这与process.stdout 无关。试试process.stdin.write
  • 为什么需要写入标准输入?为什么不能简单地调用该函数? stdin.write 只能在输入流暂停时执行(rl.pause())
  • @Ammar 我需要模拟'line' 事件进行集成测试。
  • 这似乎是不可能的。 :(

标签: javascript node.js testing integration-testing jestjs


【解决方案1】:

readline 库是EventEmitter 之上的附加层

鉴于 EventEmitter 是具有自己的测试覆盖率的节点核心模块,而 readline 具有自己的测试覆盖率 - 我会依靠它而不用担心那里匹配的错误。

我只会编写测试来覆盖我的代码中的逻辑,在这个例子中是doSomething();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 2020-01-07
    • 2021-04-24
    相关资源
    最近更新 更多