Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

jest.mock throws ReferenceError: require is not defined

I am trying to learn jest framework for unit testing with nodejs v18.12.1 and specifically mocking the functions and modules. I am using jest.mock() method to mock a module but I get this error while running the tests:ReferenceError: require is not defined in the line where jest.mock() is being called.

This is the code that has to be tested:

export function add(a, b) {
  return a + b;
}


export function subtract(a, b) {
  return a - b;
}

This is my test code:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

import * as mathcode from '../mathcode';
import {jest, describe, test, expect} from '@jest/globals';

jest.mock('../mathcode');

describe('mathcode', () => {
  test('adds numbers', () => {
    expect(mathcode.add(1,2)).toBeUndefined();
  })
})

This is my jest config:

{
  "transform":{"\\.[jt]sx?$": "babel-jest"},
  "verbose":true,
  "automock": false,
  "modulePathIgnorePatterns":["<rootDir>/node_modules/"],
  "roots": ["<rootDir>/__tests__/"]
}

This is my package.json:

{
  "name": "sample",
  "version": "1.0.0",
  "description": "sample package to learn jest",
  "main": "index.js",
  "scripts": {
    "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
    "start": "node index.js"
  },
  "author": "rakesh",
  "license": "ISC",
  "devDependencies": {
    "@babel/preset-env": "^7.20.2",
    "jest": "^29.3.1"
  },
  "type": "module"
}

This is the babel.config.json:

{
  "presets": [["@babel/preset-env", {"targets": {"node": "current"}}]]
}

Can someone help me fix this issue?

>Solution :

To fix this error, you should remove the –experimental-vm-modules flag from the jest command in your package.json scripts. This will allow Jest to use the built-in require function when running your tests.

Your package.json scripts should look like this:

"scripts": {
  "test": "jest",
  "start": "node index.js"
}

You may also need to update your jest configuration to enable the use of ESM. You can do this by adding the following field to your jest config:

"moduleFileExtensions": ["js", "mjs", "jsx", "ts", "tsx"],

This will tell Jest to treat files with the .mjs extension (which is used for ESM) as module files.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading