【问题标题】:Jest: resolves return undefined from Promise开玩笑:从 Promise 解决返回 undefined
【发布时间】:2017-09-11 00:15:10
【问题描述】:

我正在使用 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

resolves返回undefined,所以我无法继续测试值。

我尝试添加global.Promise = require.requireActual('promise'),但还是不行。

你知道我做错了什么吗?

【问题讨论】:

  • 我的回答不正确,抱歉,我一定是在考虑不同的测试框架。 FWIW,当人们试图帮助你时,即使他们错了,“无论如何,这甚至不能回答我的问题。”这不是礼貌的回应。
  • 对不起,我不想粗鲁,我只是想标记一下您的答案与问题不匹配的点。但是,是的,配方很糟糕。抱歉,感谢您尝试帮助我。

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


【解决方案1】:

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

这就是它返回undefined的原因。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢,我还是有这个问题。我用你的修复编辑了我的帖子。
    • @Frilox:我已经回滚了那个编辑。这不是 SO 的工作方式。如果您将答案编辑到问题中,答案就会变得毫无意义,看起来只是重复了问题中的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 2017-07-11
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多