gpt4 book ai didi

javascript - 在 Jest 中测试 Promises 的最佳方式

转载 作者:可可西里 更新时间:2023-11-01 01:58:06 25 4
gpt4 key购买 nike

除非我误解了什么,解决和拒绝 ( https://facebook.github.io/jest/docs/expect.html#resolves ) 将在 vNext 之前可用。现在/同时使用 Jest 测试 promise 的推荐方法是什么?是否只是将期望放在 thens 和 catches 中?

例如:

describe('Fetching', () => {
const filters = {
startDate: '2015-09-01'
};
const api = new TestApiTransport();

it('should reject if no startdate is given', () => {
MyService.fetch().catch(e => expect(e).toBeTruthy()); // see rejects/resolves in v20+
});

it('should return expected data', () => {
MyService.fetch(filters, null, api).then(serviceObjects => {
expect(serviceObjects).toHaveLength(2);
}).catch(e => console.log(e));
});
});

2019 年 6 月 15 日更新:在我发布这个问题后不久,Jest 就开始开箱即用地支持这个问题。我更改了下面已接受的答案以反射(reflect)当前执行此操作的最佳方法。

2021 年 12 月 8 日更新:Jest 在某个时候开始支持异步/等待。因此,虽然其他方法也有效,但我已经采取简单(对于大多数情况)使用类似的方法:

it('should do something', async () => {
const expected = true;
expect(await funcToTest()).toEqual(expected);
});

与大多数情况一样,async/await 比替代方案更具可读性。我现在使用 resolvesrejects 的唯一情况是针对简单的情况,例如:

it('should not throw when doing something', async () => {
await expect(funcToTest()).resolves.not.toThrow();
});

it('should throw when something is wrong', async () => {
await expect(funcToTest()).rejects.toThrow();
});

最佳答案

现在你也可以这样写:docs

describe('Fetching', () => {
const filters = {
startDate: '2015-09-01'
};
const api = new TestApiTransport();

it('should reject if no startdate is given', () => {
expect.assertions(1);
return expect(MyService.fetch()).rejects.toEqual({
error: 'Your code message',
});
});


it('should return expected data', () => {
expect.assertions(1);
return expect(MyService.fetch(filters, null, api)).resolves.toEqual(extectedObjectFromApi);
});
});

更新 (06.01.2019)

同意接受的答案不能正常工作expect.assertions(1); 完成了所有的魔法。 Link to docs

expect.assertions(number) verifies that a certain number of assertions are called during a test. This is often useful when testing asynchronous code, in order to make sure that assertions in a callback actually got called.

因此将此行放在顶部将控制特定数量 的断言在测试运行时进行。

关于javascript - 在 Jest 中测试 Promises 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43037566/

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