banner
Prajna

Prajna

github
twitter
email

The moduleNameMapper in nextJest does not work.

A magical jest problem

jest.mock("lib/store", () => ({
  jotaiStore: jest.fn(),
}));

This code will throw an error

Cannot find module 'lib/store' from 'atoms/imagePreview.test.ts'

However, I also wrote it in jext.config.js, printed the exported configuration at the end, and found that it was not successfully loaded.

const nextJest = require("next/jest");

const createJestConfig = nextJest({
  // Provide the path to your Next.js app to load next.config.js and .env files in your test environment
  dir: "./",
});

// Add any custom config to be passed to Jest
const customJestConfig = {
  setupFilesAfterEnv: ["<rootDir>/jest.setup.js"],
  testEnvironment: "jest-environment-jsdom",
  globals: {
    "ts-jest": {
      tsconfig: "<rootDir>/tsconfig.json", // Replace with the actual path
    },
  },
  moduleNameMapper: {
    "^lib/(.*)$": "<rootDir>/lib/$1",
    "^app/(.*)$": "<rootDir>/app/$1",
    "^atoms/(.*)$": "<rootDir>/atoms/$1",
    "^components/(.*)$": "<rootDir>/components/$1",
    "^hooks/(.*)$": "<rootDir>/hooks/$1",
  },
};

// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async
module.exports = createJestConfig(customJestConfig);

Finally, the reason was found:

When configuring jest.config.js, because it is the next jest version of swc, defining moduleNameMapper directly inside createJestConfig does not work, it needs to be configured inside customJestConfig.

Hope this helps those who encounter this problem.

This article is synchronized and updated to xLog by Mix Space
The original link is https://www.prajnax.com/posts/default/nextJest_moduleNameMapper_not_work


Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.