1.2.1 • Published 2 years ago

jest-mock-imports v1.2.1

Weekly downloads
1
License
MIT
Repository
github
Last release
2 years ago

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 imported 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

In this example file structure, there are a couple of files and modules being mocked.

Mocks Tables

ModuleMock File
fs__mocks__/fs.js
delete-files__mocks__/delete-files.js
FileMock File
lib/helper.jslib/__mocks__/helper.js
lib/lib.jslib/__mocks__/lib.js
lib/dir/tool.jslib/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
1.2.0

2 years ago

1.2.1

2 years ago

1.1.2

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.0

3 years ago