Skip to content

Commit d477fe5

Browse files
starfish719claude
andcommitted
test: replace toEqual with toStrictEqual in all test files
Replace all instances of .toEqual() with .toStrictEqual() across 31 test files (361 occurrences total) to ensure stricter equality checking. This follows up on the previous change to in-memory tests and extends the improvement to the entire test suite. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent 6b4d99f commit d477fe5

31 files changed

+361
-361
lines changed

examples/shared/test/demoInMemoryOAuthProvider.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ describe('DemoInMemoryAuthProvider', () => {
159159

160160
const tokens = await provider.exchangeAuthorizationCode(validClient, code);
161161

162-
expect(tokens).toEqual({
162+
expect(tokens).toStrictEqual({
163163
access_token: expect.any(String),
164164
token_type: 'bearer',
165165
expires_in: 3600,
@@ -253,7 +253,7 @@ describe('DemoInMemoryAuthProvider', () => {
253253
await store.registerClient(client);
254254
const retrieved = await store.getClient('test-client');
255255

256-
expect(retrieved).toEqual(client);
256+
expect(retrieved).toStrictEqual(client);
257257
});
258258

259259
it('should return undefined for non-existent client', async () => {

packages/client/test/client/auth.test.ts

Lines changed: 53 additions & 53 deletions
Large diffs are not rendered by default.

packages/client/test/client/middleware.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1034,7 +1034,7 @@ describe('createMiddleware', () => {
10341034
const response = await enhancedFetch('https://api.example.com/data');
10351035
const result = await response.json();
10361036

1037-
expect(result).toEqual({
1037+
expect(result).toStrictEqual({
10381038
data: 'original',
10391039
timestamp: 123456789
10401040
});

packages/client/test/client/sse.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ describe('SSEClientTransport', () => {
156156
await new Promise(resolve => setTimeout(resolve, 50));
157157

158158
expect(receivedMessages).toHaveLength(1);
159-
expect(receivedMessages[0]).toEqual(testMessage);
159+
expect(receivedMessages[0]).toStrictEqual(testMessage);
160160
});
161161

162162
it('handles malformed JSON messages', async () => {
@@ -193,7 +193,7 @@ describe('SSEClientTransport', () => {
193193

194194
expect(lastServerRequest.method).toBe('POST');
195195
expect(lastServerRequest.headers['content-type']).toBe('application/json');
196-
expect(JSON.parse((lastServerRequest as IncomingMessage & { body: string }).body)).toEqual(testMessage);
196+
expect(JSON.parse((lastServerRequest as IncomingMessage & { body: string }).body)).toStrictEqual(testMessage);
197197
});
198198

199199
it('handles POST request failures', async () => {

packages/client/test/client/stdio.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ test('should read messages', async () => {
6464
await client.send(messages[0]!);
6565
await client.send(messages[1]!);
6666
await finished;
67-
expect(readMessages).toEqual(messages);
67+
expect(readMessages).toStrictEqual(messages);
6868

6969
await client.close();
7070
});

packages/core/test/inMemory.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ describe('InMemoryTransport', () => {
3232
};
3333

3434
await clientTransport.send(message);
35-
expect(receivedMessage).toEqual(message);
35+
expect(receivedMessage).toStrictEqual(message);
3636
});
3737

3838
test('should send message with auth info from client to server', async () => {
@@ -57,8 +57,8 @@ describe('InMemoryTransport', () => {
5757
};
5858

5959
await clientTransport.send(message, { authInfo });
60-
expect(receivedMessage).toEqual(message);
61-
expect(receivedAuthInfo).toEqual(authInfo);
60+
expect(receivedMessage).toStrictEqual(message);
61+
expect(receivedAuthInfo).toStrictEqual(authInfo);
6262
});
6363

6464
test('should send message from server to client', async () => {
@@ -74,7 +74,7 @@ describe('InMemoryTransport', () => {
7474
};
7575

7676
await serverTransport.send(message);
77-
expect(receivedMessage).toEqual(message);
77+
expect(receivedMessage).toStrictEqual(message);
7878
});
7979

8080
test('should handle close', async () => {
@@ -113,6 +113,6 @@ describe('InMemoryTransport', () => {
113113

114114
await clientTransport.send(message);
115115
await serverTransport.start();
116-
expect(receivedMessage).toEqual(message);
116+
expect(receivedMessage).toStrictEqual(message);
117117
});
118118
});

packages/core/test/shared/protocol.test.ts

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ describe('protocol tests', () => {
444444
});
445445
}
446446
await Promise.resolve();
447-
await expect(requestPromise).resolves.toEqual({ result: 'success' });
447+
await expect(requestPromise).resolves.toStrictEqual({ result: 'success' });
448448
});
449449

450450
test('should respect maxTotalTimeout', async () => {
@@ -550,7 +550,7 @@ describe('protocol tests', () => {
550550
});
551551
}
552552
await Promise.resolve();
553-
await expect(requestPromise).resolves.toEqual({ result: 'success' });
553+
await expect(requestPromise).resolves.toStrictEqual({ result: 'success' });
554554
});
555555

556556
test('should handle progress notifications with message field', async () => {
@@ -618,7 +618,7 @@ describe('protocol tests', () => {
618618
});
619619
}
620620
await Promise.resolve();
621-
await expect(requestPromise).resolves.toEqual({ result: 'success' });
621+
await expect(requestPromise).resolves.toStrictEqual({ result: 'success' });
622622
});
623623
});
624624

@@ -850,9 +850,9 @@ describe('InMemoryTaskMessageQueue', () => {
850850
await queue.enqueue(taskId, msg2);
851851
await queue.enqueue(taskId, msg3);
852852

853-
expect(await queue.dequeue(taskId)).toEqual(msg1);
854-
expect(await queue.dequeue(taskId)).toEqual(msg2);
855-
expect(await queue.dequeue(taskId)).toEqual(msg3);
853+
expect(await queue.dequeue(taskId)).toStrictEqual(msg1);
854+
expect(await queue.dequeue(taskId)).toStrictEqual(msg2);
855+
expect(await queue.dequeue(taskId)).toStrictEqual(msg3);
856856
});
857857

858858
it('should return undefined when dequeuing from empty queue', async () => {
@@ -884,12 +884,12 @@ describe('InMemoryTaskMessageQueue', () => {
884884

885885
const allMessages = await queue.dequeueAll(taskId);
886886

887-
expect(allMessages).toEqual([msg1, msg2, msg3]);
887+
expect(allMessages).toStrictEqual([msg1, msg2, msg3]);
888888
});
889889

890890
it('should return empty array for empty queue', async () => {
891891
const allMessages = await queue.dequeueAll(taskId);
892-
expect(allMessages).toEqual([]);
892+
expect(allMessages).toStrictEqual([]);
893893
});
894894

895895
it('should clear queue after dequeueAll', async () => {
@@ -933,7 +933,7 @@ describe('mergeCapabilities', () => {
933933
};
934934

935935
const merged = mergeCapabilities(base, additional);
936-
expect(merged).toEqual({
936+
expect(merged).toStrictEqual({
937937
sampling: {},
938938
elicitation: {},
939939
roots: {
@@ -965,7 +965,7 @@ describe('mergeCapabilities', () => {
965965
};
966966

967967
const merged = mergeCapabilities(base, additional);
968-
expect(merged).toEqual({
968+
expect(merged).toStrictEqual({
969969
logging: {},
970970
prompts: {
971971
listChanged: true
@@ -997,7 +997,7 @@ describe('mergeCapabilities', () => {
997997
const base = {};
998998
const additional = {};
999999
const merged = mergeCapabilities(base, additional);
1000-
expect(merged).toEqual({});
1000+
expect(merged).toStrictEqual({});
10011001
});
10021002
});
10031003

@@ -1183,7 +1183,7 @@ describe('Task-based execution', () => {
11831183
const queuedMessage = await queue!.dequeue('parent-task-456');
11841184
assertQueuedNotification(queuedMessage);
11851185
expect(queuedMessage.message.method).toBe('notifications/message');
1186-
expect(queuedMessage.message.params!._meta![RELATED_TASK_META_KEY]).toEqual({ taskId: 'parent-task-456' });
1186+
expect(queuedMessage.message.params!._meta![RELATED_TASK_META_KEY]).toStrictEqual({ taskId: 'parent-task-456' });
11871187
});
11881188
});
11891189

@@ -1268,7 +1268,7 @@ describe('Task-based execution', () => {
12681268

12691269
protocol.setRequestHandler(CallToolRequestSchema, async request => {
12701270
// Tool implementor can access task creation parameters from request.params.task
1271-
expect(request.params.task).toEqual({
1271+
expect(request.params.task).toStrictEqual({
12721272
ttl: 60000,
12731273
pollInterval: 1000
12741274
});
@@ -1349,7 +1349,7 @@ describe('Task-based execution', () => {
13491349
const sentMessage = sendSpy.mock.calls[0]![0];
13501350
expect(sentMessage.jsonrpc).toBe('2.0');
13511351
expect(sentMessage.id).toBe(3);
1352-
expect(sentMessage.result.tasks).toEqual([
1352+
expect(sentMessage.result.tasks).toStrictEqual([
13531353
{
13541354
taskId: task1.taskId,
13551355
status: 'completed',
@@ -1367,7 +1367,7 @@ describe('Task-based execution', () => {
13671367
pollInterval: 1000
13681368
}
13691369
]);
1370-
expect(sentMessage.result._meta).toEqual({});
1370+
expect(sentMessage.result._meta).toStrictEqual({});
13711371
});
13721372

13731373
it('should handle tasks/list requests with cursor for pagination', async () => {
@@ -1412,7 +1412,7 @@ describe('Task-based execution', () => {
14121412
const sentMessage = sendSpy.mock.calls[0]![0];
14131413
expect(sentMessage.jsonrpc).toBe('2.0');
14141414
expect(sentMessage.id).toBe(2);
1415-
expect(sentMessage.result.tasks).toEqual([
1415+
expect(sentMessage.result.tasks).toStrictEqual([
14161416
{
14171417
taskId: task3.taskId,
14181418
status: 'working',
@@ -1423,7 +1423,7 @@ describe('Task-based execution', () => {
14231423
}
14241424
]);
14251425
expect(sentMessage.result.nextCursor).toBeUndefined();
1426-
expect(sentMessage.result._meta).toEqual({});
1426+
expect(sentMessage.result._meta).toStrictEqual({});
14271427
});
14281428

14291429
it('should handle tasks/list requests with empty results', async () => {
@@ -1456,9 +1456,9 @@ describe('Task-based execution', () => {
14561456
const sentMessage = sendSpy.mock.calls[0]![0];
14571457
expect(sentMessage.jsonrpc).toBe('2.0');
14581458
expect(sentMessage.id).toBe(3);
1459-
expect(sentMessage.result.tasks).toEqual([]);
1459+
expect(sentMessage.result.tasks).toStrictEqual([]);
14601460
expect(sentMessage.result.nextCursor).toBeUndefined();
1461-
expect(sentMessage.result._meta).toEqual({});
1461+
expect(sentMessage.result._meta).toStrictEqual({});
14621462
});
14631463

14641464
it('should return error for invalid cursor', async () => {
@@ -1895,7 +1895,7 @@ describe('Task-based execution', () => {
18951895

18961896
// Verify response does NOT include related-task metadata
18971897
const response = sendSpy.mock.calls[0]![0] as { result?: { _meta?: Record<string, unknown> } };
1898-
expect(response.result?._meta).toEqual({});
1898+
expect(response.result?._meta).toStrictEqual({});
18991899
});
19001900

19011901
it('should NOT include related-task metadata in tasks/cancel response', async () => {
@@ -1934,7 +1934,7 @@ describe('Task-based execution', () => {
19341934

19351935
// Verify response does NOT include related-task metadata
19361936
const response = sendSpy.mock.calls[0]![0] as { result?: { _meta?: Record<string, unknown> } };
1937-
expect(response.result?._meta).toEqual({});
1937+
expect(response.result?._meta).toStrictEqual({});
19381938
});
19391939

19401940
it('should include related-task metadata in tasks/result response', async () => {
@@ -2059,7 +2059,7 @@ describe('Task-based execution', () => {
20592059
const queuedMessage = await queue!.dequeue('parent-task-123');
20602060
assertQueuedNotification(queuedMessage);
20612061
expect(queuedMessage.message.method).toBe('notifications/message');
2062-
expect(queuedMessage.message.params!._meta![RELATED_TASK_META_KEY]).toEqual({
2062+
expect(queuedMessage.message.params!._meta![RELATED_TASK_META_KEY]).toStrictEqual({
20632063
taskId: 'parent-task-123'
20642064
});
20652065

@@ -3038,9 +3038,9 @@ describe('Capability negotiation for tasks', () => {
30383038
}
30393039
};
30403040

3041-
expect(serverCapabilities.tasks.list).toEqual({});
3042-
expect(serverCapabilities.tasks.cancel).toEqual({});
3043-
expect(serverCapabilities.tasks.requests.tools.call).toEqual({});
3041+
expect(serverCapabilities.tasks.list).toStrictEqual({});
3042+
expect(serverCapabilities.tasks.cancel).toStrictEqual({});
3043+
expect(serverCapabilities.tasks.requests.tools.call).toStrictEqual({});
30443044
});
30453045

30463046
it('should include list and cancel in server capabilities', () => {
@@ -3103,7 +3103,7 @@ describe('Message interception for task-related notifications', () => {
31033103
const queuedMessage = await queue!.dequeue(task.taskId);
31043104
assertQueuedNotification(queuedMessage);
31053105
expect(queuedMessage.message.method).toBe('notifications/message');
3106-
expect(queuedMessage.message.params!._meta![RELATED_TASK_META_KEY]).toEqual({ taskId: task.taskId });
3106+
expect(queuedMessage.message.params!._meta![RELATED_TASK_META_KEY]).toStrictEqual({ taskId: task.taskId });
31073107
});
31083108

31093109
it('should not queue notifications without related-task metadata', async () => {
@@ -3290,7 +3290,7 @@ describe('Message interception for task-related requests', () => {
32903290
const queuedMessage = await queue!.dequeue(task.taskId);
32913291
assertQueuedRequest(queuedMessage);
32923292
expect(queuedMessage.message.method).toBe('ping');
3293-
expect(queuedMessage.message.params!._meta![RELATED_TASK_META_KEY]).toEqual({ taskId: task.taskId });
3293+
expect(queuedMessage.message.params!._meta![RELATED_TASK_META_KEY]).toStrictEqual({ taskId: task.taskId });
32943294

32953295
// Verify resolver is stored in _requestResolvers map (not in the message)
32963296
const requestId = (queuedMessage!.message as JSONRPCRequest).id as RequestId;
@@ -3461,7 +3461,7 @@ describe('Message interception for task-related requests', () => {
34613461

34623462
// Verify the response was routed correctly
34633463
const result = await requestPromise;
3464-
expect(result).toEqual({ message: 'pong' });
3464+
expect(result).toStrictEqual({ message: 'pong' });
34653465
});
34663466

34673467
it('should log error when resolver is missing for side-channeled request', async () => {
@@ -3725,7 +3725,7 @@ describe('Message Interception', () => {
37253725
expect(queuedMessage!.type).toBe('response');
37263726
if (queuedMessage!.type === 'response') {
37273727
expect(queuedMessage!.message.id).toBe(requestId);
3728-
expect(queuedMessage!.message.result).toEqual({ content: 'test result' });
3728+
expect(queuedMessage!.message.result).toStrictEqual({ content: 'test result' });
37293729
}
37303730
});
37313731

@@ -4067,7 +4067,7 @@ describe('Message Interception', () => {
40674067
expect(queuedMessage).toBeDefined();
40684068
assertQueuedNotification(queuedMessage);
40694069
expect(queuedMessage.message.params!._meta).toBeDefined();
4070-
expect(queuedMessage.message.params!._meta![RELATED_TASK_META_KEY]).toEqual(relatedTask);
4070+
expect(queuedMessage.message.params!._meta![RELATED_TASK_META_KEY]).toStrictEqual(relatedTask);
40714071
});
40724072

40734073
it('should preserve relatedTask metadata in queued request', async () => {
@@ -4092,7 +4092,7 @@ describe('Message Interception', () => {
40924092
expect(queuedMessage).toBeDefined();
40934093
assertQueuedRequest(queuedMessage);
40944094
expect(queuedMessage.message.params!._meta).toBeDefined();
4095-
expect(queuedMessage.message.params!._meta![RELATED_TASK_META_KEY]).toEqual(relatedTask);
4095+
expect(queuedMessage.message.params!._meta![RELATED_TASK_META_KEY]).toStrictEqual(relatedTask);
40964096

40974097
// Clean up
40984098
transport.onmessage?.({
@@ -4130,7 +4130,7 @@ describe('Message Interception', () => {
41304130
assertQueuedNotification(queuedMessage);
41314131
expect(queuedMessage.message.params!._meta!.customField).toBe('customValue');
41324132
expect(queuedMessage.message.params!._meta!.anotherField).toBe(123);
4133-
expect(queuedMessage.message.params!._meta![RELATED_TASK_META_KEY]).toEqual({
4133+
expect(queuedMessage.message.params!._meta![RELATED_TASK_META_KEY]).toStrictEqual({
41344134
taskId: 'task-preserve-meta'
41354135
});
41364136
});
@@ -5373,7 +5373,7 @@ describe('Error handling for missing resolvers', () => {
53735373
const calledError = resolverMock.mock.calls[0]![0];
53745374
expect(calledError.code).toBe(ErrorCode.InvalidParams);
53755375
expect(calledError.message).toContain('Validation failed');
5376-
expect(calledError.data).toEqual({ field: 'userName', reason: 'required' });
5376+
expect(calledError.data).toStrictEqual({ field: 'userName', reason: 'required' });
53775377
});
53785378

53795379
it('should not throw when processing error with missing resolver', async () => {
@@ -5561,7 +5561,7 @@ describe('Error handling for missing resolvers', () => {
55615561
}
55625562

55635563
// Verify FIFO order was maintained
5564-
expect(callOrder).toEqual([1, 2, 3]);
5564+
expect(callOrder).toStrictEqual([1, 2, 3]);
55655565
});
55665566
});
55675567
});

packages/core/test/shared/stdio.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ test('should only yield a message after a newline', () => {
1818
expect(readBuffer.readMessage()).toBeNull();
1919

2020
readBuffer.append(Buffer.from('\n'));
21-
expect(readBuffer.readMessage()).toEqual(testMessage);
21+
expect(readBuffer.readMessage()).toStrictEqual(testMessage);
2222
expect(readBuffer.readMessage()).toBeNull();
2323
});
2424

@@ -31,5 +31,5 @@ test('should be reusable after clearing', () => {
3131

3232
readBuffer.append(Buffer.from(JSON.stringify(testMessage)));
3333
readBuffer.append(Buffer.from('\n'));
34-
expect(readBuffer.readMessage()).toEqual(testMessage);
34+
expect(readBuffer.readMessage()).toStrictEqual(testMessage);
3535
});

0 commit comments

Comments
 (0)