jest-mock-imports
v1.2.1
Published
Mock imports by changing the import path of ESModule files.
Downloads
14
Maintainers
Readme
jest-mock-imports
Mock imports by changing the import path of ESModule and CommonJS files.
Why?
This module is meant for mocking modules that are import
ed by files. jest.mock
is designed for mocking require
, but it doesn't work for ESModules. It also doesn't do a good job mocking CommonJS files. This module is a jest transformer that changes the import
and require
paths of you files.
Setup
This module is meant to be used with jest
.
Installing
npm i -D jest jest-mock-imports
File structure
- __mocks__
- fs.js
- delete-files.js
- lib
- __mocks__
- helper.js
- lib.js
- index.js
- helper.js
- lib.js
- dir
- __mocks__
- tool.js
- tool.js
- __mocks__
- __mocks__
- jest.config.js
- transformer.cjs
In this example file structure, there are a couple of files and modules being mocked.
Mocks Tables
Module | Mock File --- | --- fs | __mocks__/fs.js delete-files | __mocks__/delete-files.js
File | Mock File --- | --- lib/helper.js | lib/__mocks__/helper.js lib/lib.js | lib/__mocks__/lib.js lib/dir/tool.js | lib/dir/__mocks__/tool.js
Import Examples
lib/index.js
Normally:
import fs from 'fs'
import { myTool } from './dir/tool.js'
export { helper } from './helper.js'
export * as lib from './lib.js'
import sum from 'not-mocked'
import prime from './not-mocked.js'
When testing with jest:
import fs from '../__mocks__/fs'
import { myTool } from './dir/__mocks__/tool.js'
export { helper } from './__mocks__/helper.js'
export * as lib from './__mocks__/lib.js'
import sum from 'not-mocked'
import prime from './not-mocked.js'
jest.config.js
This tells jest to transform all files ending with .js
files using the transformer.
export default {
transform: {
'\\.js': './transformer.cjs'
}
}
transformer.cjs
const { mock } = require('jest-mock-imports')
const mockFn = mock({
modules: new Map()
.set('fs', 'fs.js') // Uses fs.js in __mocks__
.set('delete-files', 'delete-files.js'), // Uses delete-files.js in __mocks__
files: new Set() // All the files in this set have mocks with the same file name in the __mocks__ folder in the same level as the files.
.add('lib/helper.js')
.add('lib/lib.js')
.add('lib/dir/tool.js')
})
exports.process = mockFn // Jest uses the exports.process function