测试可读流(开玩笑),延迟推送值

Roy*_*oyM 6 testing stream node.js jestjs

我正在尝试创建一个可读流,其中数据以突发方式到达,数据包之间有延迟(例如在网络读取中)。

我在开玩笑地测试这个时遇到了麻烦。我在下面编写了 2 个测试 两个测试中的第一个有效(因为它向控制台产生输出),但第二个失败 - 也就是说,在控制台上看不到输出。我也尝试过使用 fakeTimers,但似乎没什么区别。任何指针将不胜感激。

测试本身没有依赖性 - 所以代码应该独立运行

const Readable = require('stream').Readable
function sleep(ms) {return new Promise(resolve => setTimeout(resolve, ms))}
const lines = ['line 1\n', 'line 2\nline 3']
function* getIter() {for (let line of lines) {yield line}}

describe ('Iteration', () => {

  it ('read iter values from stream', () => {
    let rs = new Readable, res, iter = getIter()

    while (res = iter.next()) {
      if (res.done) {
        rs.push(null)
        break
      } else {
        rs.push(res.value)
      }
    }
    rs.pipe(process.stdout)
  })

  it ('read iter values from stream with delay', (done) => {
    var rs = new Readable,
        res,
        iter = getIter()

    while (res = iter.next()) {
      if (res.done) {
        sleep(1).then(() => {
          rs.push(null)
        })
        break
      } else {
        sleep(1).then(() => {
          rs.push(res.value)
        })
      }
    }

    sleep(10).then(() => {
      rs.pipe(process.stdout)
      done()
    })
  })
})
Run Code Online (Sandbox Code Playgroud)