Jest:测试嵌套的承诺

Pla*_*Ton 1 javascript promise jestjs

我是开玩笑的新手,并且无法确定如何测试嵌套在 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)
    }
  })
}
Run Code Online (Sandbox Code Playgroud)

我想测试以确保,假设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()
    })
  })
})
Run Code Online (Sandbox Code Playgroud)

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

And*_*rle 6

您需要将您创建的 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()


  })
})
Run Code Online (Sandbox Code Playgroud)