Skip to content

Instantly share code, notes, and snippets.

@apieceofbart
Created February 21, 2018 13:15
Show Gist options
  • Save apieceofbart/d28690d52c46848c39d904ce8968bb27 to your computer and use it in GitHub Desktop.
Save apieceofbart/d28690d52c46848c39d904ce8968bb27 to your computer and use it in GitHub Desktop.
mock lodash debounce in jest
// somewhere on top
import _ from 'lodash';
jest.unmock('lodash');
// then
_.debounce = jest.fn((fn) => fn);
@iainure
Copy link

iainure commented May 29, 2020

This worked for me

jest.mock('lodash', () => ({ ...require.requireActual('lodash'), debounce: fn => { fn.cancel = jest.fn(); return fn; }, }));

Yep this is the one that finally sorted it for me too. Thanks a lot.

@afontcu
Copy link

afontcu commented Jun 6, 2020

Since require.requireActual was removed in Jest v26 (jestjs/jest#9854), I believe you should use jest.requireActual

@qweluke
Copy link

qweluke commented Jul 10, 2020

It all depends how you import debounce

for
import { debounce } from 'lodash'

add to the top of your test (after imports)

const lodash = require('lodash')
lodash.debounce = jest.fn(fn => fn)

for
import debounce from 'lodash/debounce';
use
jest.mock('lodash/debounce', () => jest.fn(fn => fn));

@onekiloparsec
Copy link

Thanks so much @qweluke. How hard it is to find this information.

@vv13
Copy link

vv13 commented Nov 26, 2020

jest.mock('lodash', () => {
  const module = jest.requireActual('lodash');
  module.debounce = jest.fn(fn => fn);
  return module;
});

@jabreezy
Copy link

You have to call the function and ignore the timer jest.mock('lodash/fp/debounce', () =>jest.fn((nr, fn) => fn())). This worked for me.

Thank you so much, this worked for me.

@jatin-maropost
Copy link

jest.mock('lodash.debounce', () => jest.fn(fn => fn))

This works , Thanks

@rishik30
Copy link

This worked for me wonderfully

jest.mock('lodash', () => ({
...require.requireActual('lodash'), debounce: fn => {
fn.cancel = jest.fn(); return fn;
},}));`

Thanks.

@Knogobert
Copy link

Updated version of @mos-adebayo's above that worked for me (using lodash-es)

jest.mock('lodash-es', () => ({
  ...jest.requireActual('lodash-es'),
  debounce: (fn) => {
    fn.cancel = jest.fn();
    return fn;
  },
}));

@pvev
Copy link

pvev commented Jun 4, 2022

You have to call the function and ignore the timer jest.mock('lodash/fp/debounce', () =>jest.fn((nr, fn) => fn())). This worked for me.

👍

@sumrender
Copy link

sumrender commented Apr 15, 2024

This worked for me perfectly:

import * as lodash from 'lodash-es';
// other imports...

jest.mock('lodash-es/debounce', () => ({
  default: jest.fn(fn => fn),
  __esModule: true
}));

// describe block...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment