Removing automatically reset modules between test run
Reviewed By: bestander Differential Revision: D3886125 fbshipit-source-id: c8f47c3466add1e2c89649a1c6f47b01f0d7a89e
This commit is contained in:
parent
d41c3950eb
commit
7b2080e118
File diff suppressed because it is too large
Load Diff
|
@ -1,3 +1,12 @@
|
|||
/**
|
||||
* Copyright (c) 2013-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
jest.autoMockOff();
|
||||
|
@ -6,7 +15,9 @@ const getProjectDependencies = require('../getProjectDependencies');
|
|||
const path = require('path');
|
||||
|
||||
describe('getProjectDependencies', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
jest.resetModules();
|
||||
});
|
||||
it('should return an array of project dependencies', () => {
|
||||
jest.setMock(
|
||||
path.join(process.cwd(), './package.json'),
|
||||
|
|
|
@ -21,6 +21,7 @@ jest.setMock(
|
|||
|
||||
describe('link', () => {
|
||||
beforeEach(() => {
|
||||
jest.resetModules();
|
||||
delete require.cache[require.resolve('../link')];
|
||||
log.level = 'silent';
|
||||
});
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
"jestSupport/env.js"
|
||||
],
|
||||
"timers": "fake",
|
||||
"resetModules": true,
|
||||
"moduleNameMapper": {
|
||||
"^image![a-zA-Z0-9$_-]+$": "GlobalImageStub",
|
||||
"^[./a-zA-Z0-9$_-]+\\.png$": "RelativeImageStub"
|
||||
|
|
|
@ -21,6 +21,7 @@ describe('code transformation worker:', () => {
|
|||
|
||||
let extractDependencies, transform;
|
||||
beforeEach(() => {
|
||||
jest.resetModules();
|
||||
({transformCode} = require('..'));
|
||||
extractDependencies =
|
||||
require('../extract-dependencies').mockReturnValue({});
|
||||
|
@ -58,18 +59,22 @@ describe('code transformation worker:', () => {
|
|||
});
|
||||
});
|
||||
|
||||
it('removes the leading assignment to `module.exports` before passing on the result if the file is a JSON file, even if minified', done => {
|
||||
const result = {
|
||||
code: 'p.exports={a:1,b:2}',
|
||||
};
|
||||
transform.mockImplementation((_, callback) =>
|
||||
callback(null, result));
|
||||
it(
|
||||
'removes the leading assignment to `module.exports` before passing ' +
|
||||
'on the result if the file is a JSON file, even if minified',
|
||||
done => {
|
||||
const result = {
|
||||
code: 'p.exports={a:1,b:2}',
|
||||
};
|
||||
transform.mockImplementation((_, callback) =>
|
||||
callback(null, result));
|
||||
|
||||
transformCode(transform, 'aribtrary/file.json', 'b', {}, (_, data) => {
|
||||
expect(data.code).toBe('{a:1,b:2}');
|
||||
done();
|
||||
});
|
||||
});
|
||||
transformCode(transform, 'aribtrary/file.json', 'b', {}, (_, data) => {
|
||||
expect(data.code).toBe('{a:1,b:2}');
|
||||
done();
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
it('removes shebang when present', done => {
|
||||
const shebang = '#!/usr/bin/env node';
|
||||
|
@ -110,35 +115,51 @@ describe('code transformation worker:', () => {
|
|||
});
|
||||
});
|
||||
|
||||
it('uses `dependencies` and `dependencyOffsets` provided by `extractDependencies` for the result', done => {
|
||||
const dependencyData = {
|
||||
dependencies: ['arbitrary', 'list', 'of', 'dependencies'],
|
||||
dependencyOffsets: [12, 119, 185, 328, 471],
|
||||
};
|
||||
extractDependencies.mockReturnValue(dependencyData);
|
||||
it(
|
||||
'uses `dependencies` and `dependencyOffsets` ' +
|
||||
'provided by `extractDependencies` for the result',
|
||||
done => {
|
||||
const dependencyData = {
|
||||
dependencies: ['arbitrary', 'list', 'of', 'dependencies'],
|
||||
dependencyOffsets: [12, 119, 185, 328, 471],
|
||||
};
|
||||
extractDependencies.mockReturnValue(dependencyData);
|
||||
|
||||
transformCode(transform, 'filename', 'code', {}, (_, data) => {
|
||||
expect(data).toEqual(objectContaining(dependencyData));
|
||||
done();
|
||||
});
|
||||
});
|
||||
transformCode(transform, 'filename', 'code', {}, (_, data) => {
|
||||
expect(data).toEqual(objectContaining(dependencyData));
|
||||
done();
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
it('does not extract requires if files are marked as "extern"', done => {
|
||||
transformCode(transform, 'filename', 'code', {extern: true}, (_, {dependencies, dependencyOffsets}) => {
|
||||
expect(extractDependencies).not.toBeCalled();
|
||||
expect(dependencies).toEqual([]);
|
||||
expect(dependencyOffsets).toEqual([]);
|
||||
done();
|
||||
});
|
||||
transformCode(
|
||||
transform,
|
||||
'filename',
|
||||
'code',
|
||||
{extern: true},
|
||||
(_, {dependencies, dependencyOffsets}) => {
|
||||
expect(extractDependencies).not.toBeCalled();
|
||||
expect(dependencies).toEqual([]);
|
||||
expect(dependencyOffsets).toEqual([]);
|
||||
done();
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
it('does not extract requires of JSON files', done => {
|
||||
transformCode(transform, 'arbitrary.json', '{"arbitrary":"json"}', {}, (_, {dependencies, dependencyOffsets}) => {
|
||||
expect(extractDependencies).not.toBeCalled();
|
||||
expect(dependencies).toEqual([]);
|
||||
expect(dependencyOffsets).toEqual([]);
|
||||
done();
|
||||
});
|
||||
transformCode(
|
||||
transform,
|
||||
'arbitrary.json',
|
||||
'{"arbitrary":"json"}',
|
||||
{},
|
||||
(_, {dependencies, dependencyOffsets}) => {
|
||||
expect(extractDependencies).not.toBeCalled();
|
||||
expect(dependencies).toEqual([]);
|
||||
expect(dependencyOffsets).toEqual([]);
|
||||
done();
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ let FileWatcher;
|
|||
describe('processRequest', () => {
|
||||
let SourceMapConsumer, Bundler, Server, AssetServer, Promise;
|
||||
beforeEach(() => {
|
||||
jest.resetModules();
|
||||
SourceMapConsumer = require('source-map').SourceMapConsumer;
|
||||
Bundler = require('../../Bundler');
|
||||
Server = require('../');
|
||||
|
@ -253,52 +254,55 @@ describe('processRequest', () => {
|
|||
jest.runAllTicks();
|
||||
});
|
||||
|
||||
it('does not rebuild the bundles that contain a file when that file is changed, even when hot loading is enabled', () => {
|
||||
const bundleFunc = jest.fn();
|
||||
bundleFunc
|
||||
.mockReturnValueOnce(
|
||||
Promise.resolve({
|
||||
getSource: () => 'this is the first source',
|
||||
getSourceMap: () => {},
|
||||
getEtag: () => () => 'this is an etag',
|
||||
})
|
||||
)
|
||||
.mockReturnValue(
|
||||
Promise.resolve({
|
||||
getSource: () => 'this is the rebuilt source',
|
||||
getSourceMap: () => {},
|
||||
getEtag: () => () => 'this is an etag',
|
||||
})
|
||||
);
|
||||
it(
|
||||
'does not rebuild the bundles that contain a file ' +
|
||||
'when that file is changed, even when hot loading is enabled',
|
||||
() => {
|
||||
const bundleFunc = jest.fn();
|
||||
bundleFunc
|
||||
.mockReturnValueOnce(
|
||||
Promise.resolve({
|
||||
getSource: () => 'this is the first source',
|
||||
getSourceMap: () => {},
|
||||
getEtag: () => () => 'this is an etag',
|
||||
})
|
||||
)
|
||||
.mockReturnValue(
|
||||
Promise.resolve({
|
||||
getSource: () => 'this is the rebuilt source',
|
||||
getSourceMap: () => {},
|
||||
getEtag: () => () => 'this is an etag',
|
||||
})
|
||||
);
|
||||
|
||||
Bundler.prototype.bundle = bundleFunc;
|
||||
Bundler.prototype.bundle = bundleFunc;
|
||||
|
||||
server = new Server(options);
|
||||
server.setHMRFileChangeListener(() => {});
|
||||
server = new Server(options);
|
||||
server.setHMRFileChangeListener(() => {});
|
||||
|
||||
requestHandler = server.processRequest.bind(server);
|
||||
requestHandler = server.processRequest.bind(server);
|
||||
|
||||
makeRequest(requestHandler, 'mybundle.bundle?runModule=true')
|
||||
.done(response => {
|
||||
expect(response.body).toEqual('this is the first source');
|
||||
expect(bundleFunc.mock.calls.length).toBe(1);
|
||||
});
|
||||
makeRequest(requestHandler, 'mybundle.bundle?runModule=true')
|
||||
.done(response => {
|
||||
expect(response.body).toEqual('this is the first source');
|
||||
expect(bundleFunc.mock.calls.length).toBe(1);
|
||||
});
|
||||
|
||||
jest.runAllTicks();
|
||||
jest.runAllTicks();
|
||||
|
||||
triggerFileChange('all','path/file.js', options.projectRoots[0]);
|
||||
jest.runAllTimers();
|
||||
jest.runAllTicks();
|
||||
triggerFileChange('all','path/file.js', options.projectRoots[0]);
|
||||
jest.runAllTimers();
|
||||
jest.runAllTicks();
|
||||
|
||||
expect(bundleFunc.mock.calls.length).toBe(1);
|
||||
server.setHMRFileChangeListener(null);
|
||||
expect(bundleFunc.mock.calls.length).toBe(1);
|
||||
server.setHMRFileChangeListener(null);
|
||||
|
||||
makeRequest(requestHandler, 'mybundle.bundle?runModule=true')
|
||||
.done(response => {
|
||||
expect(response.body).toEqual('this is the rebuilt source');
|
||||
expect(bundleFunc.mock.calls.length).toBe(2);
|
||||
});
|
||||
jest.runAllTicks();
|
||||
makeRequest(requestHandler, 'mybundle.bundle?runModule=true')
|
||||
.done(response => {
|
||||
expect(response.body).toEqual('this is the rebuilt source');
|
||||
expect(bundleFunc.mock.calls.length).toBe(2);
|
||||
});
|
||||
jest.runAllTicks();
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -382,7 +386,10 @@ describe('processRequest', () => {
|
|||
|
||||
server.processRequest(req, res);
|
||||
jest.runAllTimers();
|
||||
expect(AssetServer.prototype.get).toBeCalledWith('imgs/主页/logo.png', undefined);
|
||||
expect(AssetServer.prototype.get).toBeCalledWith(
|
||||
'imgs/\u{4E3B}\u{9875}/logo.png',
|
||||
undefined
|
||||
);
|
||||
expect(res.setHeader).toBeCalledWith('Cache-Control', 'max-age=31536000');
|
||||
expect(res.end).toBeCalledWith('i am image');
|
||||
});
|
||||
|
|
|
@ -22,6 +22,7 @@ describe('FileWatcher', () => {
|
|||
let config;
|
||||
|
||||
beforeEach(() => {
|
||||
jest.resetModules();
|
||||
const sane = require('sane');
|
||||
WatchmanWatcher = sane.WatchmanWatcher;
|
||||
WatchmanWatcher.prototype.once.mockImplementation(
|
||||
|
|
|
@ -40,6 +40,8 @@ describe('DependencyGraph', function() {
|
|||
}
|
||||
|
||||
beforeEach(function() {
|
||||
jest.resetModules();
|
||||
|
||||
Module = require('../Module');
|
||||
const fileWatcher = {
|
||||
on: function() {
|
||||
|
@ -245,7 +247,7 @@ describe('DependencyGraph', function() {
|
|||
...defaults,
|
||||
roots: [root],
|
||||
});
|
||||
return getOrderedDependenciesAsJSON(dgraph, '/root/index.js', null, false).then(function(deps) {
|
||||
return getOrderedDependenciesAsJSON(dgraph, '/root/index.js', null, false).then((deps) => {
|
||||
expect(deps)
|
||||
.toEqual([
|
||||
{
|
||||
|
@ -1918,7 +1920,7 @@ describe('DependencyGraph', function() {
|
|||
});
|
||||
});
|
||||
|
||||
pit('should support browser mapping of a package to a file ("' + fieldName + '")', function() {
|
||||
pit('should support browser mapping of a package to a file ("' + fieldName + '")', () => {
|
||||
var root = '/root';
|
||||
setMockFileSystem({
|
||||
'root': {
|
||||
|
@ -2337,7 +2339,8 @@ describe('DependencyGraph', function() {
|
|||
'node-package-c': 'rn-package-c',
|
||||
},
|
||||
}),
|
||||
'index.js': 'require("node-package-a"); require("node-package-b"); require("node-package-c");',
|
||||
'index.js':
|
||||
'require("node-package-a"); require("node-package-b"); require("node-package-c");',
|
||||
'node_modules': {
|
||||
'node-package-a': {
|
||||
'package.json': JSON.stringify({
|
||||
|
@ -2510,50 +2513,53 @@ describe('DependencyGraph', function() {
|
|||
});
|
||||
});
|
||||
|
||||
pit('should only use `extraNodeModules` after checking all possible filesystem locations', () => {
|
||||
const root = '/root';
|
||||
setMockFileSystem({
|
||||
[root.slice(1)]: {
|
||||
'index.js': 'require("bar")',
|
||||
'node_modules': { 'bar.js': '' },
|
||||
'provides-bar': { 'index.js': '' },
|
||||
},
|
||||
});
|
||||
pit(
|
||||
'should only use `extraNodeModules` after checking all possible filesystem locations',
|
||||
() => {
|
||||
const root = '/root';
|
||||
setMockFileSystem({
|
||||
[root.slice(1)]: {
|
||||
'index.js': 'require("bar")',
|
||||
'node_modules': { 'bar.js': '' },
|
||||
'provides-bar': { 'index.js': '' },
|
||||
},
|
||||
});
|
||||
|
||||
var dgraph = new DependencyGraph({
|
||||
...defaults,
|
||||
roots: [root],
|
||||
extraNodeModules: {
|
||||
'bar': root + '/provides-bar',
|
||||
},
|
||||
});
|
||||
var dgraph = new DependencyGraph({
|
||||
...defaults,
|
||||
roots: [root],
|
||||
extraNodeModules: {
|
||||
'bar': root + '/provides-bar',
|
||||
},
|
||||
});
|
||||
|
||||
return getOrderedDependenciesAsJSON(dgraph, '/root/index.js').then(deps => {
|
||||
expect(deps)
|
||||
.toEqual([
|
||||
{
|
||||
id: '/root/index.js',
|
||||
path: '/root/index.js',
|
||||
dependencies: ['bar'],
|
||||
isAsset: false,
|
||||
isAsset_DEPRECATED: false,
|
||||
isJSON: false,
|
||||
isPolyfill: false,
|
||||
resolution: undefined,
|
||||
},
|
||||
{
|
||||
id: '/root/node_modules/bar.js',
|
||||
path: '/root/node_modules/bar.js',
|
||||
dependencies: [],
|
||||
isAsset: false,
|
||||
isAsset_DEPRECATED: false,
|
||||
isJSON: false,
|
||||
isPolyfill: false,
|
||||
resolution: undefined,
|
||||
},
|
||||
]);
|
||||
});
|
||||
});
|
||||
return getOrderedDependenciesAsJSON(dgraph, '/root/index.js').then(deps => {
|
||||
expect(deps)
|
||||
.toEqual([
|
||||
{
|
||||
id: '/root/index.js',
|
||||
path: '/root/index.js',
|
||||
dependencies: ['bar'],
|
||||
isAsset: false,
|
||||
isAsset_DEPRECATED: false,
|
||||
isJSON: false,
|
||||
isPolyfill: false,
|
||||
resolution: undefined,
|
||||
},
|
||||
{
|
||||
id: '/root/node_modules/bar.js',
|
||||
path: '/root/node_modules/bar.js',
|
||||
dependencies: [],
|
||||
isAsset: false,
|
||||
isAsset_DEPRECATED: false,
|
||||
isJSON: false,
|
||||
isPolyfill: false,
|
||||
resolution: undefined,
|
||||
},
|
||||
]);
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
pit('should be able to resolve paths within `extraNodeModules`', () => {
|
||||
const root = '/root';
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
/**
|
||||
* Copyright (c) 2013-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
@ -50,6 +59,7 @@ describe('fast-path', () => {
|
|||
};
|
||||
|
||||
beforeEach(function() {
|
||||
jest.resetModules();
|
||||
process.platform = 'linux';
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in New Issue