0

我正在使用 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({})
    })
  })
}

{}为了成为简单的测试用例,promise 解决了。

所以,我想测试以下功能,我希望结果是一个包含{}.
我有以下代码:

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

resolvesreturn undefined,所以我不能继续测试值。

我尝试添加global.Promise = require.requireActual('promise'),但仍然无法正常工作。

你知道我做错了什么吗?

4

2 回答 2

3

resolves方法从 20.0.0+ 开始可用。所以它还不是可用的。资源

这就是它返回的原因undefined

于 2017-04-14T20:01:27.920 回答
2

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

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

if (err !== null) {
  reject(err)
} else {
  resolve({})
}
于 2017-04-14T18:22:19.977 回答