Skip to content

Instantly share code, notes, and snippets.

@yuraxdrumz
Forked from heyimalex/example.js
Created October 23, 2019 13:03
Show Gist options
  • Save yuraxdrumz/fc2d479a448fadfe8a250273808d2413 to your computer and use it in GitHub Desktop.
Save yuraxdrumz/fc2d479a448fadfe8a250273808d2413 to your computer and use it in GitHub Desktop.
Using mock-fs with jest
// __tests__/example.js
jest.mock('fs');
it('should serve as a nice example', () => {
const fs = require('fs')
// fs can be set up at any point by calling __configureFs.
fs.__configureFs({
'/test': {
'a.foo': '----',
// mock-fs' other exports are also available on the fs object.
'b.bar': fs.__mockFile({
content: 'file content here',
ctime: new Date(1),
mtime: new Date(1)
}),
})
const results = fs.readdirSync('/test')
expect(results.length).toBe(2)
expect(results).toEqual(['a.foo', 'b.bar'])
})
// __mocks__/fs.js
const mockfs = require('mock-fs');
const container = {
__internalFs: null,
__configureFs: (conf) => {
container.__internalFs = mockfs.fs(conf);
},
__mockFile: mockfs.file,
__mockDirectory: mockfs.directory,
__mockSymlink: mockfs.symlink,
}
const proxyfs = new Proxy(container, {
get: function (target, property, receiver) {
if (target.hasOwnProperty(property)) {
return target[property];
} else {
if (target.__internalFs === null) {
target.__internalFs = mockfs.fs();
}
return target.__internalFs[property];
}
}
})
module.exports = proxyfs;
// mock-fs hooks the native fs on first require, so unfortunately just using
// the __mocks__ file isn't enough; jest will mock fs itself and stuff gets
// complicated. I'm actually not completely sure _what_ happens, but the end
// result is that you need to require mock fs before anything else or it
// doesn't work.
require('mock-fs')
{
"devDependencies": {
"jest": "^15.1.1",
"mock-fs": "^3.11.0",
},
"scripts": {
"test": "jest"
},
"jest": {
"setupFiles": ["<rootDir>/jestsetup.js"]
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment