Testing Guide
Learn how to test code that uses the Conviso Node SDK.
Overview
Testing Conviso integrations ensures your application handles user data correctly without making actual API calls during tests.
Mocking Strategies
Jest Mocking
Mock the entire Conviso client:
import { CDPClient } from '@codematic.io/cdp-node';
jest.mock('@codematic.io/cdp-node');
describe('UserService', () => {
let mockClient: jest.Mocked<CDPClient>;
beforeEach(() => {
mockClient = {
identify: jest.fn().mockResolvedValue(undefined),
track: jest.fn().mockResolvedValue(undefined),
sendEmail: jest.fn().mockResolvedValue({ success: true }),
sendPush: jest.fn().mockResolvedValue({ success: true }),
registerDevice: jest.fn().mockResolvedValue(undefined),
ping: jest.fn().mockResolvedValue(undefined)
} as any;
(CDPClient as jest.Mock).mockImplementation(() => mockClient);
});
test('identifies user on signup', async () => {
const service = new UserService();
await service.signupUser('[email protected]', 'John Doe');
expect(mockClient.identify).toHaveBeenCalledWith(
expect.any(String),
expect.objectContaining({
email: '[email protected]',
name: 'John Doe'
})
);
});
});
Manual Mocking
Create a mock client class:
// __mocks__/@codematic.io/cdp-node.ts
export class CDPClient {
identify = jest.fn().mockResolvedValue(undefined);
track = jest.fn().mockResolvedValue(undefined);
sendEmail = jest.fn().mockResolvedValue({ success: true });
sendPush = jest.fn().mockResolvedValue({ success: true });
registerDevice = jest.fn().mockResolvedValue(undefined);
ping = jest.fn().mockResolvedValue(undefined);
constructor(config: any) {
// Store config if needed for assertions
}
}