jest-webpack-alias
Advanced tools
Comparing version 2.1.0 to 2.2.0
@@ -12,3 +12,4 @@ var _ = require('lodash'); | ||
} else { | ||
var dirList = fs.readdirSync(dirname); | ||
var dirList; | ||
try { dirList = fs.readdirSync(dirname); } catch(e) { dirList = []; } | ||
var dirTree = cache[dirname] = cacheize(dirList); | ||
@@ -15,0 +16,0 @@ return dirTree; |
var _ = require('lodash'); | ||
var dirHas = require('./dirHas'); | ||
var find = _.find; | ||
var fs = require('fs'); | ||
@@ -20,3 +19,2 @@ var path = require('path'); | ||
var webpackSettings; | ||
var nodeModulesDirs; | ||
@@ -45,6 +43,2 @@ function ensureWebpackInfo(filename) { | ||
}); | ||
nodeModulesDirs = moduleDirs.filter(function(dir) { | ||
return path.basename(dir) === 'node_modules'; | ||
}); | ||
} | ||
@@ -72,3 +66,3 @@ | ||
var dirname = path.dirname(absMatch); | ||
var ext = find(fileExtensions, function(ext) { | ||
var ext = _.find(fileExtensions, function(ext) { | ||
return dirHas(dirname, path.basename(absMatch + ext)); | ||
@@ -79,15 +73,9 @@ }); | ||
function resolveFirstDir(dirname, rest) { | ||
var matchingDir, matchingExt; | ||
function locate(dirname) { | ||
var matchingExt; | ||
if (rest) { | ||
matchingDir = find(moduleDirs, function(aliasDir) { | ||
return dirHas(aliasDir, dirname); | ||
}); | ||
} else { | ||
matchingDir = find(moduleDirs, function(aliasDir) { | ||
matchingExt = resolveExtension(aliasDir, dirname); | ||
return matchingExt !== undefined; | ||
}); | ||
} | ||
var matchingDir = _.find(moduleDirs, function(candidate) { | ||
matchingExt = resolveExtension(candidate, dirname); | ||
return matchingExt !== undefined; | ||
}); | ||
@@ -137,11 +125,15 @@ return { | ||
var matchingFirstDir = resolveFirstDir(dirname, rest); | ||
if (!matchingFirstDir.dir || _.contains(nodeModulesDirs, matchingFirstDir.dir)) { | ||
var match = locate(dependency); | ||
if (!match.dir) { | ||
return dependency; | ||
} | ||
var matchingDir = path.join(matchingFirstDir.dir, dirname) + matchingFirstDir.ext; | ||
var matchingDir = path.join(match.dir, dirname); | ||
var relative = resolveDependencyToMatch(matchingDir, rest, filename); | ||
var ext = rest ? (resolveExtension(matchingDir, rest) || '') : ''; | ||
var ext = match.ext || ''; | ||
if (_.includes(relative, '/node_modules/')) { | ||
return dependency; | ||
} | ||
return relative + ext; | ||
@@ -148,0 +140,0 @@ } |
{ | ||
"name": "jest-webpack-alias", | ||
"version": "2.1.0", | ||
"version": "2.2.0", | ||
"description": "Preprocessor for Jest that is able to resolve require() statements using webpack aliases.", | ||
@@ -5,0 +5,0 @@ "main": "lib/preprocessor.js", |
@@ -73,10 +73,9 @@ # jest-webpack-alias | ||
## Missing features | ||
## Known issues | ||
This module does not yet support: | ||
- `resolve.alias` settings whose values are absolute paths might not work | ||
- `resolve.modulesDirectories` only searches the directory containing your package.json file, not all ancestors of current file | ||
- `resolve.alias` settings whose values are absolute paths | ||
## License | ||
MIT |
@@ -29,2 +29,14 @@ var expect = require('./lib/expect'); | ||
}); | ||
describe('with nonexistent directory', function() { | ||
it('returns false without throwing error', function() { | ||
var firstDir = '/top/src/bogus/directory'; | ||
var output = dirHas(firstDir, 'dir1'); | ||
expect(fs.readdirSync).to.be.calledOnce; | ||
expect(fs.readdirSync.args[0][0]).to.eq('/top/src/bogus/directory'); | ||
expect(cache[firstDir]).to.eql(cacheize([])); | ||
expect(output).to.not.be.ok; | ||
}); | ||
}); | ||
}); |
@@ -14,3 +14,8 @@ var Setup = require('./setup'); | ||
'/top/src/dir2': ['lib2a.js', 'lib1b-2b.js'], | ||
'/top/test': ['file1.test.js', 'file2.test.js'] | ||
'/top/src/dir3': ['dir3-1'], | ||
'/top/src/dir3/dir3-1': ['mocked.js'], | ||
'/top/test': ['file1.test.js', 'file2.test.js', '__mocks__'], | ||
'/top/test/__mocks__': ['dir3'], | ||
'/top/test/__mocks__/dir3': ['dir3-1'], | ||
'/top/test/__mocks__/dir3/dir3-1': ['mocked.js'] | ||
}; | ||
@@ -30,3 +35,3 @@ | ||
resolve: { | ||
root: ['/top/src', '/top/bogus_dir'], | ||
root: ['/top/test/__mocks__', '/top/src', '/top/bogus_dir'], | ||
extensions: ["", ".js", ".jsx"], | ||
@@ -33,0 +38,0 @@ // omitted: fallback |
@@ -53,6 +53,8 @@ var expect = require('./lib/expect'); | ||
verifyExistsSync([ | ||
['/top/src'], ['/top/bogus_dir'], ['/top/node_modules'], ['/top/web_modules'] | ||
['/top/test/__mocks__'], ['/top/src'], ['/top/bogus_dir'], ['/top/node_modules'], ['/top/web_modules'] | ||
]); | ||
verifyDirHas([ | ||
['/top/src', 'dir1'], | ||
['/top/test/__mocks__/dir1', 'lib1a'], | ||
['/top/test/__mocks__/dir1', 'lib1a.js'], | ||
['/top/test/__mocks__/dir1', 'lib1a.jsx'], | ||
['/top/src/dir1', 'lib1a'], | ||
@@ -65,3 +67,3 @@ ['/top/src/dir1', 'lib1a.js'] | ||
it('falls back to no extension if no exact match found', function() { | ||
it('if no exact match found, does not modify dependency', function() { | ||
var src = "var lib1a = require('dir1/lib1a.noext');"; | ||
@@ -71,8 +73,16 @@ var output = webpackAlias.process(src, filename); | ||
verifyDirHas([ | ||
['/top/src', 'dir1'], | ||
['/top/test/__mocks__/dir1', 'lib1a.noext'], | ||
['/top/test/__mocks__/dir1', 'lib1a.noext.js'], | ||
['/top/test/__mocks__/dir1', 'lib1a.noext.jsx'], | ||
['/top/src/dir1', 'lib1a.noext'], | ||
['/top/src/dir1', 'lib1a.noext.js'], | ||
['/top/src/dir1', 'lib1a.noext.jsx'] | ||
['/top/src/dir1', 'lib1a.noext.jsx'], | ||
['/top/node_modules/dir1', 'lib1a.noext'], | ||
['/top/node_modules/dir1', 'lib1a.noext.js'], | ||
['/top/node_modules/dir1', 'lib1a.noext.jsx'], | ||
['/top/web_modules/dir1', 'lib1a.noext'], | ||
['/top/web_modules/dir1', 'lib1a.noext.js'], | ||
['/top/web_modules/dir1', 'lib1a.noext.jsx'] | ||
]); | ||
expect(output).to.eq("var lib1a = require('../src/dir1/lib1a.noext');"); | ||
expect(output).to.eq("var lib1a = require('dir1/lib1a.noext');"); | ||
}); | ||
@@ -84,7 +94,6 @@ | ||
verifyExistsSync([ | ||
['/top/src'], ['/top/bogus_dir'], ['/top/node_modules'], ['/top/web_modules'] | ||
]); | ||
verifyDirHas([ | ||
['/top/src', 'dir1'], | ||
['/top/test/__mocks__/dir1', 'lib1a'], | ||
['/top/test/__mocks__/dir1', 'lib1a.js'], | ||
['/top/test/__mocks__/dir1', 'lib1a.jsx'], | ||
['/top/src/dir1', 'lib1a'], | ||
@@ -108,3 +117,5 @@ ['/top/src/dir1', 'lib1a.js'] | ||
verifyDirHas([ | ||
['/top/src', 'dir1'], | ||
['/top/test/__mocks__/dir1', 'lib1a'], | ||
['/top/test/__mocks__/dir1', 'lib1a.js'], | ||
['/top/test/__mocks__/dir1', 'lib1a.jsx'], | ||
['/top/src/dir1', 'lib1a'], | ||
@@ -127,2 +138,5 @@ ['/top/src/dir1', 'lib1a.js'] | ||
verifyDirHas([ | ||
['/top/test/__mocks__', 'node1'], | ||
['/top/test/__mocks__', 'node1.js'], | ||
['/top/test/__mocks__', 'node1.jsx'], | ||
['/top/src', 'node1'], | ||
@@ -136,3 +150,3 @@ ['/top/src', 'node1.js'], | ||
it('resolves submodule, but leaves dependency alone', function() { | ||
it('resolves submodule, trying first at file level, but leaves dependency alone', function() { | ||
var src = "var lib1a = require('node1/lib/submodule');"; | ||
@@ -142,4 +156,10 @@ var output = webpackAlias.process(src, filename); | ||
verifyDirHas([ | ||
['/top/src', 'node1'], | ||
['/top/node_modules', 'node1'] | ||
['/top/test/__mocks__/node1/lib', 'submodule'], | ||
['/top/test/__mocks__/node1/lib', 'submodule.js'], | ||
['/top/test/__mocks__/node1/lib', 'submodule.jsx'], | ||
['/top/src/node1/lib', 'submodule'], | ||
['/top/src/node1/lib', 'submodule.js'], | ||
['/top/src/node1/lib', 'submodule.jsx'], | ||
['/top/node_modules/node1/lib', 'submodule'], | ||
['/top/node_modules/node1/lib', 'submodule.js'] | ||
]); | ||
@@ -160,2 +180,5 @@ expect(output).to.eq("var lib1a = require('node1/lib/submodule');"); | ||
verifyDirHas([ | ||
['/top/test/__mocks__', 'web2'], | ||
['/top/test/__mocks__', 'web2.js'], | ||
['/top/test/__mocks__', 'web2.jsx'], | ||
['/top/src', 'web2'], | ||
@@ -185,2 +208,5 @@ ['/top/src', 'web2.js'], | ||
verifyDirHas([ | ||
['/top/test/__mocks__', 'bogus1'], | ||
['/top/test/__mocks__', 'bogus1.js'], | ||
['/top/test/__mocks__', 'bogus1.jsx'], | ||
['/top/src', 'bogus1'], | ||
@@ -247,3 +273,3 @@ ['/top/src', 'bogus1.js'], | ||
describe('with destination of node_modules', function() { | ||
it('applies alias to simple paths with no extension change', function() { | ||
it('applies alias to top-level paths with no extension change', function() { | ||
var src = "var lib1a = require('aliasNodeFileSrc');"; | ||
@@ -253,2 +279,5 @@ var output = webpackAlias.process(src, filename); | ||
verifyDirHas([ | ||
['/top/test/__mocks__', 'aliasNodeFileDest'], | ||
['/top/test/__mocks__', 'aliasNodeFileDest.js'], | ||
['/top/test/__mocks__', 'aliasNodeFileDest.jsx'], | ||
['/top/src', 'aliasNodeFileDest'], | ||
@@ -268,4 +297,10 @@ ['/top/src', 'aliasNodeFileDest.js'], | ||
verifyDirHas([ | ||
['/top/src', 'node1'], | ||
['/top/node_modules', 'node1'] | ||
['/top/test/__mocks__/node1/lib', 'submodule'], | ||
['/top/test/__mocks__/node1/lib', 'submodule.js'], | ||
['/top/test/__mocks__/node1/lib', 'submodule.jsx'], | ||
['/top/src/node1/lib', 'submodule'], | ||
['/top/src/node1/lib', 'submodule.js'], | ||
['/top/src/node1/lib', 'submodule.jsx'], | ||
['/top/node_modules/node1/lib', 'submodule'], | ||
['/top/node_modules/node1/lib', 'submodule.js'] | ||
]); | ||
@@ -275,9 +310,15 @@ expect(output).to.eq("var lib1a = require('node1/lib/submodule');"); | ||
it('replaces subdir paths with alias destination', function() { | ||
var src = "var lib1a = require('aliasNodeSubdir2Src/ignore/this');"; | ||
it('applies alias definitions that contain subdirs', function() { | ||
var src = "var lib1a = require('aliasNodeSubdir2Src');"; | ||
var output = webpackAlias.process(src, filename); | ||
verifyDirHas([ | ||
['/top/src', 'node1'], | ||
['/top/node_modules', 'node1'] | ||
['/top/test/__mocks__/node1/lib', 'submodule'], | ||
['/top/test/__mocks__/node1/lib', 'submodule.js'], | ||
['/top/test/__mocks__/node1/lib', 'submodule.jsx'], | ||
['/top/src/node1/lib', 'submodule'], | ||
['/top/src/node1/lib', 'submodule.js'], | ||
['/top/src/node1/lib', 'submodule.jsx'], | ||
['/top/node_modules/node1/lib', 'submodule'], | ||
['/top/node_modules/node1/lib', 'submodule.js'] | ||
]); | ||
@@ -293,3 +334,5 @@ expect(output).to.eq("var lib1a = require('node1/lib/submodule');"); | ||
verifyDirHas([ | ||
['/top/src', 'dir1'], | ||
['/top/test/__mocks__/dir1', 'lib1a'], | ||
['/top/test/__mocks__/dir1', 'lib1a.js'], | ||
['/top/test/__mocks__/dir1', 'lib1a.jsx'], | ||
['/top/src/dir1', 'lib1a'], | ||
@@ -311,16 +354,26 @@ ['/top/src/dir1', 'lib1a.js'] | ||
}); | ||
}); | ||
describe('resolve', function() { | ||
it('applies alias to subdir paths', function() { | ||
var resolved = webpackAlias.resolve('aliasPlainSubdirSrc', filename); | ||
describe('resolve', function() { | ||
beforeEach(function() { | ||
filename = '/top/test/file1.test.js'; | ||
}); | ||
verifyDirHas([ | ||
['/top/src', 'dir1'], | ||
['/top/src/dir1', 'lib1a'], | ||
['/top/src/dir1', 'lib1a.js'] | ||
]); | ||
expect(resolved).to.eq('../src/dir1/lib1a.js'); | ||
}); | ||
it('resolves with file extension', function() { | ||
var resolved = webpackAlias.resolve('dir1/lib1a', filename); | ||
verifyExistsSync([ | ||
['/top/test/__mocks__'], ['/top/src'], ['/top/bogus_dir'], ['/top/node_modules'], ['/top/web_modules'] | ||
]); | ||
verifyDirHas([ | ||
['/top/test/__mocks__/dir1', 'lib1a'], | ||
['/top/test/__mocks__/dir1', 'lib1a.js'], | ||
['/top/test/__mocks__/dir1', 'lib1a.jsx'], | ||
['/top/src/dir1', 'lib1a'], | ||
['/top/src/dir1', 'lib1a.js'] | ||
]); | ||
expect(webpackInfo.read).to.be.calledOnce; | ||
expect(resolved).to.eq('../src/dir1/lib1a.js'); | ||
}); | ||
}); | ||
}); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
39543
1008
81