Skip to content

Commit c4d3573

Browse files
authored
polish: add expectPromise.toReject helper (#4694)
and implement toRejectWith in terms of toReject extracted from #4670
1 parent ff54db2 commit c4d3573

3 files changed

Lines changed: 40 additions & 7 deletions

File tree

src/__testUtils__/__tests__/expectPromise-test.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,24 @@ describe('expectPromise', () => {
1616
expect(await expectPromise(promise).toResolve()).to.equal(testValue);
1717
});
1818

19+
it('toReject throws if the promise does not reject', async () => {
20+
try {
21+
await expectPromise(Promise.resolve({})).toReject(); /* c8 ignore start */
22+
} /* c8 ignore stop */ catch (err) {
23+
const errorMessage = err instanceof Error ? err.message : String(err);
24+
expect(errorMessage).to.equal(
25+
"Promise should have rejected, but resolved as '{}'",
26+
);
27+
}
28+
});
29+
30+
it('toReject returns the rejected reason', async () => {
31+
const error = new Error('foo');
32+
expect(await expectPromise(Promise.reject(error)).toReject()).to.equal(
33+
error,
34+
);
35+
});
36+
1937
it('toRejectWith throws if the promise does not reject', async () => {
2038
try {
2139
await expectPromise(Promise.resolve({})).toRejectWith(

src/__testUtils__/expectPromise.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { isPromise } from '../jsutils/isPromise.js';
55

66
interface PromiseExpectation {
77
toResolve: () => Promise<unknown>;
8+
toReject: () => Promise<unknown>;
89
toRejectWith: (message: string) => Promise<Error>;
910
}
1011

@@ -18,6 +19,24 @@ export function expectPromise(maybePromise: unknown): PromiseExpectation {
1819
toResolve(): Promise<unknown> {
1920
return maybePromise;
2021
},
22+
async toReject(): Promise<unknown> {
23+
let caughtError: unknown;
24+
let resolved;
25+
let rejected = false;
26+
try {
27+
resolved = await maybePromise;
28+
} catch (error) {
29+
rejected = true;
30+
caughtError = error;
31+
}
32+
33+
assert(
34+
rejected,
35+
`Promise should have rejected, but resolved as '${inspect(resolved)}'`,
36+
);
37+
38+
return caughtError;
39+
},
2140
async toRejectWith(message: string): Promise<Error> {
2241
let caughtError: unknown;
2342
let resolved;

src/execution/__tests__/subscribe-test.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,13 +1051,9 @@ describe('Subscription Publish Phase', () => {
10511051
payload = subscription.next();
10521052

10531053
// Throw error
1054-
let caughtError;
1055-
try {
1056-
/* c8 ignore next 2 */
1057-
await subscription.throw('ouch');
1058-
} catch (e) {
1059-
caughtError = e;
1060-
}
1054+
const caughtError = await expectPromise(
1055+
subscription.throw('ouch'),
1056+
).toReject();
10611057
expect(caughtError).to.equal('ouch');
10621058

10631059
expect(await payload).to.deep.equal({

0 commit comments

Comments
 (0)