istanbuljs / test-exclude

test for inclusion or exclusion of paths using globs

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.