-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathjest.setup.ts
53 lines (48 loc) · 1.45 KB
/
jest.setup.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import * as grpc from "@grpc/grpc-js";
expect.extend({
toThrowGrpcException(
received: unknown,
message: string | RegExp,
expectedStatusCode: grpc.status
) {
if (!(received instanceof Error)) {
return {
pass: false,
message: () => `Expected to throw an Error but received ${received}`,
};
}
// gRPC service error formats error messages as "<STATUS_CODE_INT> <STATUS_CODE_STRING>: <message>"
const errorMessage = (received?.message ?? "")
.split(":")[1]
.replace(/^\s{0,}/, "");
if (message instanceof RegExp) {
if (!message.test(errorMessage)) {
return {
pass: false,
message: () =>
`Expected to throw an Error with message matching ${message} but received "${errorMessage}"`,
};
}
} else if (errorMessage !== message) {
return {
pass: false,
message: () =>
`Expected to throw an Error with message ${message} but received "${errorMessage}"`,
};
}
if ((received as grpc.ServiceError).code !== expectedStatusCode) {
return {
pass: false,
message: () =>
`Expected to throw an Error with status code ${expectedStatusCode} but received ${
(received as grpc.ServiceError).code
}`,
};
}
return {
pass: true,
message: () =>
`Expected to throw an Error with status code ${expectedStatusCode}`,
};
},
});