【问题标题】:Jest: Testing a nested promise笑话:测试一个嵌套的 Promise
【发布时间】:2018-10-19 07:25:25
【问题描述】:

我是 jest 的新手,在确定如何测试嵌套在 Promise 中的结果时遇到了麻烦。具体来说:

myMethod: function (e) {
  let self = this
  self.resetErrors()

  Parser.parseFile(this.form.uploadFile).then(res => {
    const hasErrors = self.validFile(res)
    if (!hasErrors) {
      self.processFile(res)
    }
  })
}

我想测试以确保,假设 hasErrors 为假,self.processFile 会触发。这是我目前(失败)的最大努力:

describe("if the provided data is valid", () => {
  it('runs processFile', () => {
    const mockProcessFile = jest.fn()
    mockParser = jest.fn(() => {
      new Promise((resolve, reject) => {
        return ValidMockData
      }).then((loanData) => {
        expect(mockProcessFile).toBeCalled()
      })
    })

    CsvParser.parseFile = mockParser

    wrapper.vm.validFile = jest.fn(true)
    wrapper.vm.processFile = mockProcessFile
    wrapper.vm.store().resolve((data) => {
      expect(mockProcessFile).toBeCalled()
    })
  })
})

目前我收到Cannot read property 'then' of undefined 错误 - 这是有道理的,但我不确定在 then() 调用中我应该如何破解期望。任何想法表示赞赏

【问题讨论】:

  • 我注意到的第一件事 new Promise((resolve, reject) => { return ValidMockData }) ...承诺需要解决或拒绝...返回一些 ValidMockData 不会这样做

标签: javascript promise jestjs


【解决方案1】:

您需要将您创建的 Promise 存储在测试中,以便您可以使用 await 让测试在解决后完成:

describe("if the provided data is valid", async() => {
  it('runs processFile', () => {
    const mockProcessFile = jest.fn()
    const p = Promise.resolve(ValidMockData)
    CsvParser.parseFile = jest.fn(() => p)


    wrapper.vm.validFile = jest.fn(true)
    wrapper.vm.processFile = mockProcessFile
    wrapper.vm.store()

    await p

    expect(mockProcessFile).toBeCalled()
    expect(mockProcessFile).toBeCalled()


  })
})

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 2019-01-25
    • 2017-01-01
    • 2017-12-03
    • 2018-10-06
    • 2013-03-30
    • 1970-01-01
    • 2021-07-11
    • 2017-11-13
    相关资源
    最近更新 更多