mirror of https://github.com/status-im/metro.git
Update Jest + jest-haste-map
Reviewed By: voideanvalue Differential Revision: D4180887 fbshipit-source-id: f6ee6901e63206824f0639c81b64167b66da2168
This commit is contained in:
parent
91a409afe6
commit
d207bc32ec
|
@ -8,7 +8,7 @@
|
|||
*/
|
||||
'use strict';
|
||||
|
||||
jest.autoMockOff();
|
||||
jest.disableAutomock();
|
||||
jest.useRealTimers();
|
||||
jest
|
||||
.mock('fs')
|
||||
|
@ -18,97 +18,6 @@ jest
|
|||
.mock('child_process', () => ({}))
|
||||
;
|
||||
|
||||
// This is an ugly hack:
|
||||
// * jest-haste-map uses `find` for fast file system crawling which won't work
|
||||
// when we mock the file system in node. This mock copies the node crawler's
|
||||
// implementation and always falls back to the node crawling mechanism.
|
||||
// Ideally we'll make this an option in jest-haste-map to force it to use
|
||||
// the node crawler.
|
||||
jest.mock('jest-haste-map/build/crawlers/node', () => {
|
||||
const H = require('jest-haste-map/build/constants');
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
function find(
|
||||
roots,
|
||||
extensions,
|
||||
ignore,
|
||||
callback)
|
||||
{
|
||||
const result = [];
|
||||
let activeCalls = 0;
|
||||
|
||||
function search(directory) {
|
||||
activeCalls++;
|
||||
fs.readdir(directory, (err, names) => {
|
||||
activeCalls--;
|
||||
|
||||
names.forEach(file => {
|
||||
file = path.join(directory, file);
|
||||
if (ignore(file)) {
|
||||
return;
|
||||
}
|
||||
activeCalls++;
|
||||
|
||||
fs.lstat(file, (err, stat) => {
|
||||
activeCalls--;
|
||||
|
||||
if (!err && stat && !stat.isSymbolicLink()) {
|
||||
if (stat.isDirectory()) {
|
||||
search(file);
|
||||
} else {
|
||||
const ext = path.extname(file).substr(1);
|
||||
if (extensions.indexOf(ext) !== -1) {
|
||||
result.push([file, stat.mtime.getTime()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (activeCalls === 0) {
|
||||
callback(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if (activeCalls === 0) {
|
||||
callback(result);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
roots.forEach(search);
|
||||
}
|
||||
|
||||
return function nodeCrawl(
|
||||
roots,
|
||||
extensions,
|
||||
ignore,
|
||||
data)
|
||||
{
|
||||
return new Promise(resolve => {
|
||||
const callback = list => {
|
||||
const files = Object.create(null);
|
||||
list.forEach(fileData => {
|
||||
const name = fileData[0];
|
||||
const mtime = fileData[1];
|
||||
const existingFile = data.files[name];
|
||||
if (existingFile && existingFile[H.MTIME] === mtime) {
|
||||
files[name] = existingFile;
|
||||
} else {
|
||||
// See ../constants.js
|
||||
files[name] = ['', mtime, 0, []];
|
||||
}
|
||||
});
|
||||
data.files = files;
|
||||
resolve(data);
|
||||
};
|
||||
|
||||
find(roots, extensions, ignore, callback);
|
||||
});
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
const mocksPattern = /(?:[\\/]|^)__mocks__[\\/]([^\/]+)\.js$/;
|
||||
|
||||
// This doesn't have state, and it's huge (Babel) so it's much faster to
|
||||
|
@ -201,6 +110,7 @@ describe('DependencyGraph', function() {
|
|||
assetExts: ['png', 'jpg'],
|
||||
cache: new Cache(),
|
||||
fileWatcher,
|
||||
forceNodeFilesystemAPI: true,
|
||||
providesModuleNodeModules: [
|
||||
'haste-fbjs',
|
||||
'react-haste',
|
||||
|
|
|
@ -53,6 +53,7 @@ class DependencyGraph {
|
|||
roots: Array<string>,
|
||||
ignoreFilePath: (filePath: string) => boolean,
|
||||
fileWatcher: FileWatcher,
|
||||
forceNodeFilesystemAPI: boolean,
|
||||
assetRoots_DEPRECATED: Array<string>,
|
||||
assetExts: Array<string>,
|
||||
providesModuleNodeModules: mixed,
|
||||
|
@ -85,6 +86,7 @@ class DependencyGraph {
|
|||
roots,
|
||||
ignoreFilePath,
|
||||
fileWatcher,
|
||||
forceNodeFilesystemAPI,
|
||||
assetRoots_DEPRECATED,
|
||||
assetExts,
|
||||
providesModuleNodeModules,
|
||||
|
@ -108,6 +110,7 @@ class DependencyGraph {
|
|||
roots: Array<string>,
|
||||
ignoreFilePath: (filePath: string) => boolean,
|
||||
fileWatcher: FileWatcher,
|
||||
forceNodeFilesystemAPI?: boolean,
|
||||
assetRoots_DEPRECATED: Array<string>,
|
||||
assetExts: Array<string>,
|
||||
providesModuleNodeModules: mixed,
|
||||
|
@ -131,6 +134,7 @@ class DependencyGraph {
|
|||
roots,
|
||||
ignoreFilePath: ignoreFilePath || (() => {}),
|
||||
fileWatcher,
|
||||
forceNodeFilesystemAPI: !!forceNodeFilesystemAPI,
|
||||
assetRoots_DEPRECATED: assetRoots_DEPRECATED || [],
|
||||
assetExts: assetExts || [],
|
||||
providesModuleNodeModules,
|
||||
|
@ -165,6 +169,7 @@ class DependencyGraph {
|
|||
const mw = this._opts.maxWorkers;
|
||||
const haste = new JestHasteMap({
|
||||
extensions: this._opts.extensions.concat(this._opts.assetExts),
|
||||
forceNodeFilesystemAPI: this._opts.forceNodeFilesystemAPI,
|
||||
ignorePattern: {test: this._opts.ignoreFilePath},
|
||||
maxWorkers: typeof mw === 'number' && mw >= 1 ? mw : getMaxWorkers(),
|
||||
mocksPattern: '',
|
||||
|
|
Loading…
Reference in New Issue