gpt4 book ai didi

javascript - Jest 单元测试调用返回 promise 的函数的函数

转载 作者:行者123 更新时间:2023-11-30 21:16:08 33 4
gpt4 key购买 nike

如果我有这样的代码:

import externalThing from 'externalThing'
import anotherThing from 'anotherThing'

function functionIWantToTest()
{
externalThing.doSomething()
.then(data=>{
anotherThing.do(data.Id)
})
}

对此进行单元测试的最佳实践方法是什么?

理想情况下,测试应该是这样的:

import externalThing from 'externalThing'
import anotherThing from 'anotherThing'

jest.mock('externalThing',()=>jest.fn())
jest.mock('anotherThing',()=>jest.fn())

describe('when calling functionIWantToTest',()=>{

beforeEach(()=>{
anotherThing.do=jest.fn()
//mock external thing somehow so that it still the 'then' code

functionIWantToTest()
})

it('anotherThing should be called',()=>{
expect(anotherThing.do).toHaveBeenCalledWith(1)
});
});

但是当我尝试时,我最终只是用 jest.fn() 构建了一个模拟函数链,并且没有实际执行任何代码。

最佳答案

还没有尝试过 jest。您可以使用 console.assert() 来测试函数调用和返回的 Promise 值。请注意,任何一个函数调用实际上都没有返回任何值,如果这对预期结果很重要,请参见 Why is value undefined at .then() chained to Promise? .

function functionIWantToTest() {
return Promise.resolve({
Id: 1
})
.then(data => {
console.assert(data.Id === 1, data, [`${data.Id} is not equal to 1`]);
console.assert(data.Id !== 1, data, [`${data.Id} is equal to 1`]);
})
}

functionIWantToTest()

关于javascript - Jest 单元测试调用返回 promise 的函数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45663803/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com