test-exclude doesn't support absolute paths
stevenvachon opened this issue · comments
const testExclude = require('test-exclude');
const exclude = testExclude({
exclude: ['/project/file']
});
exclude.shouldInstrument('./file')); //-> false
Just to make sure I understand what you are saying, can I assume that your above test assumes that process.cwd() === '/project'
?
const assert = require('assert');
const path = require('path');
const testExclude = require('test-exclude');
function failingTest() {
const exclude = testExclude({
exclude: [path.resolve('file')]
});
assert.equal(exclude.shouldInstrument('./file'), false);
}
function passingTest() {
const exclude = testExclude({
exclude: [path.resolve('file')],
relativePath: false
});
assert.equal(exclude.shouldInstrument(path.resolve('./file')), false);
}
// a call to `failingTest()` will assert, a call to `passingTest()` will not.
There are issues mixing of relative and absolute paths, I'm not aware of anything that uses relativePath: false
outside test-exclude
's own tests.
Correct, cwd is /project
.
relativePath: false
is required to make it work, or will that make relative paths fail ("mixing") ?
Mixing does not work as of now. The only correct way (as of now) to exclude ./file
is exclude: ["file"]
.
exclude.shouldInstrument()
actually expects an absolute path to be provided for the first argument. If relativePath: true
it converts to a relative path for comparison with the include/exclude options.
It's a tough situation, we have to be really careful with logic changes to test-exclude
(4.8 million downloads last week, lots of users dependent on the current logic). By far the nominal use is relativePath: true
.
Side note: it appears that the README for test-exclude is incorrect as the examples show passing relative filenames to shouldInstrument
. I've opened #33 regarding the need to correct/improve the documentation.