New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

jest-mock-proxy

Package Overview
Dependencies
Maintainers
3
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jest-mock-proxy

Mock classes and objects with the power of proxies!

3.1.2
latest
Source
npm
Version published
Weekly downloads
4.6K
11%
Maintainers
3
Weekly downloads
 
Created
Source

jest-mock-proxy

buid buid version MIT License

Mock classes and objects with the power of proxies!

Creates a Proxy that will dynamically create spies when a property is accessed the first time. Every subsequent access will use the same spy. In combination with TypeScript this allows us to create a mock for any class/object without having to specify all its properties and methods.

tl;dr;

  • The Proxy makes any property and method available on the mock at runtime.
  • TypeScript limits access to properties and methods to the specified generic.

Install

Requires node 8+.

$ yarn add -D jest-mock-proxy

or

$ npm install -D jest-mock-proxy

Usage

Mock objects and instances

// service.ts
export class Service {
  foo() {
    console.log('hello');
  }
  bar(s: string) {
    return s;
  }
}

// some.test.ts
import { createMockProxy } from 'jest-mock-proxy';
import { service } from './service';

const mock = createMockProxy<typeof Service>();

mock.foo();

mock.bar.mockReturnValue('some string');
mock.bar('test'); // 'some string'
Example: Mock an elastic search client.
import { Client } from 'elasticsearch';
import { createMockProxy } from 'jest-mock-proxy';
import fixture from './__fixtures__/elastic-response.json';

// This is an imaginary service that depends on the elastic search client.
import createService from './createService';

const client = createMockProxy<Client>();
const service = createService(client);

beforeEach(() => {
  client.mockClear();
  client.search.mockResolvedValue(fixture);
});

test('use service to query', async () => {
  await service.query('https://example.com?q=hello');
  expect(client.search.mock.calls).toMatchSnapshot();
});

Mock a class and use jest's automock

When you need to mock a dependency via jest.mock, because you have no access to the module.

// query.ts
import { Pool, PoolConfig } from 'pg';

// 😨 This makes testing hard...
const pool = new Pool();

export const query = async (q: string, values?: any[]) => {
  // ...because how to mock this?
  const { rows } = pool.query(q, values);
  return rows;
};

// query.test.ts
import { Pool } from 'pg';
import { createProxyFromMock } from 'jest-mock-proxy';

import { query } from './query';

jest.mock('pg');
const mockedPool = createProxyFromMock(Pool);

test('you can now mock the pool.query', async () => {
  // Use mockedPool so you get good type inference from TS
  mockedPool.query.mockResolvedValue({ rows: [{ id: 1, data: 'data' }] });

  await query('SELECT * FROM table1'); // returns `[{ id: 1, data: 'data' }]`
});

Keywords

jest

FAQs

Package last updated on 19 May 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts