【发布时间】:2020-06-11 17:57:24
【问题描述】:
我想实现一个异步访问一些 api 并进行一些计算的函数。但是我想使用 Promise(也因为我认为为它们编写单元测试很容易)
这是我要写的函数。
const CalcFactory = (someApi1, someApi2, someApi3) =>
async function calculation(params){
return new Promise((res, rej) =>{
const data1 = someApi1.getData() // getData is async
someApi2.getData((err, data) =>{
if(err)
rej(err);
else
res();
});
});
}
现在的问题是如何测试和模拟这个?我的第一个测试是是否所有的 api 方法都被调用了,但我已经为此苦苦挣扎了。
const Calculator = CalcFactory(api1Mock, api2Mock, api3Mock);
if('should hit all external apis', () => {
return Calculator(somedada).then(()=>{
expect(api1Mock.getData).toHaveBeenCalledWith(someData);
expect(api2Mock.getData).toHaveBeenCalledWith(somedata);
});
});
模拟看起来像这样:
const api1Mock = {
someData: jest.fn(),
}
const api2Mock = {
someData: jest.fn().mockResolvedValue({
data:{},
})
}
但是,当我运行测试时,我总是会超时。我也不确定这是否是编写函数的好方法,但我真的很想使用 Promise。
【问题讨论】:
标签: javascript unit-testing jestjs