Jest:从Promise中解析返回undefined

时间:2017-04-14 17:46:20

标签: javascript node.js promise jestjs babel-polyfill

我正在使用jest进行测试。我想测试函数的返回:

const xml2js = require('xml2js')

const parser = new xml2js.Parser()

function opmlParser(xmlData) {
  return new Promise((resolve, reject) => {
    parser.parseString(xmlData, (err, data) => {
      if (err !== null && data !== null) reject(err)
      resolve({})
    })
  })
}

承诺解析{}以便处于简单的测试用例中。

所以,我想测试以下函数,我希望结果是一个包含{}的承诺。
我有以下代码:

const fs = require('fs');

test('minimal-opml', () => {
  const xmlData = fs.readFileSync('test/opml-parser/opml/test1.opml')
  return expect(opmlParser(xmlData)).resolves.toEqual({})
})

正如Jest文档所述,我在匹配结果之前使用resolves语句并使用return

但是,我遇到了一个问题:

TypeError: Cannot read property 'toEqual' of undefined

resolves返回undefined,因此我无法继续测试值。

我尝试添加global.Promise = require.requireActual('promise'),但仍无效。

你知道我在做什么错吗?

2 个答案:

答案 0 :(得分:3)

resolves方法可以从20.0.0+开始实现。所以它还没有用处。 source

这就是它返回undefined

的原因

答案 1 :(得分:2)

在检查opmlParser函数中的错误时遇到一些问题。你想检查是否有错误并拒绝,否则解决。

试试这个(括号是为了清晰起见,您可能需要根据具体情况对其进行优化):

if (err !== null) {
  reject(err)
} else {
  resolve({})
}