Skip to main content

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
}
}