测试 promise-chain 是
Test promise-chain with Jest
我正在尝试使用 Jest 测试 promises-chain 序列:
someChainPromisesMethod: function() {
async()
.then(async1)
.then(async2)
.then(result)
.catch(error);
}
虽然测试单个 promise 的记录很好,但不确定什么是测试这种链的正确方法(不确定 TBO 应该做什么)。让我们假设所有异步都被模拟并且只是解决他们 body.
中的承诺 (Promise.resolve)
所以我需要一些可以测试整个序列的东西。
您可以使用 jest.fn() 来模拟实现并检查函数被调用的内容以及 return 您想要的内容。您需要模拟函数中的所有 async
函数以及 return 您想要的。
例如
async = jest.fn(() => {
return Promise.resolve('value');
});
async1 = jest.fn(() => {
return Promise.resolve('value1');
});
async2 = jest.fn(() => {
return Promise.resolve('Final Value');
});
您可以在测试中使用它作为
it('should your test scenario', (done) => {
someChainPromisesMethod()
.then(data => {
expect(async1).toBeCalledWith('value');
expect(async2).toBeCalledWith('value1');
expect(data).toEqual('Final Value');
done();
});
});
但是,如果您有逻辑,我会展平您的链并单独测试它们,这样您就可以轻松测试所有可能性。
使用 done 并不能解决问题,它会给你一个误报测试。如果出于任何原因期望失败,您的测试将超时并且您不会得到真正的结果。
正确的解决方案是 return 您的 Promise,因此 Jest 将能够正确评估预期结果。
按照@grgmo 的例子,更好的方法可能是:
it('should your test scenario', () => {
return someChainPromisesMethod()
.then(data => {
expect(async1).toBeCalledWith('value');
expect(async2).toBeCalledWith('value1');
expect(data).toEqual('Final Value');
});
});
我正在尝试使用 Jest 测试 promises-chain 序列:
someChainPromisesMethod: function() {
async()
.then(async1)
.then(async2)
.then(result)
.catch(error);
}
虽然测试单个 promise 的记录很好,但不确定什么是测试这种链的正确方法(不确定 TBO 应该做什么)。让我们假设所有异步都被模拟并且只是解决他们 body.
中的承诺 (Promise.resolve)所以我需要一些可以测试整个序列的东西。
您可以使用 jest.fn() 来模拟实现并检查函数被调用的内容以及 return 您想要的内容。您需要模拟函数中的所有 async
函数以及 return 您想要的。
例如
async = jest.fn(() => {
return Promise.resolve('value');
});
async1 = jest.fn(() => {
return Promise.resolve('value1');
});
async2 = jest.fn(() => {
return Promise.resolve('Final Value');
});
您可以在测试中使用它作为
it('should your test scenario', (done) => {
someChainPromisesMethod()
.then(data => {
expect(async1).toBeCalledWith('value');
expect(async2).toBeCalledWith('value1');
expect(data).toEqual('Final Value');
done();
});
});
但是,如果您有逻辑,我会展平您的链并单独测试它们,这样您就可以轻松测试所有可能性。
使用 done 并不能解决问题,它会给你一个误报测试。如果出于任何原因期望失败,您的测试将超时并且您不会得到真正的结果。
正确的解决方案是 return 您的 Promise,因此 Jest 将能够正确评估预期结果。
按照@grgmo 的例子,更好的方法可能是:
it('should your test scenario', () => {
return someChainPromisesMethod()
.then(data => {
expect(async1).toBeCalledWith('value');
expect(async2).toBeCalledWith('value1');
expect(data).toEqual('Final Value');
});
});