How can the usage of unwanted functions in code base be detected in Node, particularly Gulp?
I'm after checking for unintentionally spoiled specs, i.e ddescribe/fdescribe and iit/fit for Jasmine or .only and .skip for Mocha:
// should be reported
fdescribe(function () {
// should not be reported
it(function () {
var fit = ...;
this.fit = ...;
});
// should not be reported
// fit(function () { ... });
// should be reported
xit(function () { ... });
// should be reported
fit(function () { ... });
});
// should be reported
describe.only(function () {
// should not be reported
it(function () { ... });
// should not be reported
// it.only(function () { ... });
// should be reported
it.skip(function () { ... });
// should be reported
it.only(function () { ... });
});
The task should exit with error and output file names and line numbers where listed functions are used.
The commented ones surely don't have to be detected, as well as functions/properties with the same name (most likely fit), so simple regexp match is not an option here (like it would be for console.*). Some AST-based solution that accepts user-defined function names would be appreciated.
I would solve it on a static analysis step via ESLint javascript linting utility. To catch the exclusive/focused mocha specs accidentally left in the codebase, there is a no-exclusive-tests rule implemented in the eslint-plugin-mocha plugin:
Mocha has a feature that allows you to run tests exclusively by appending
.onlyto a test-suite or a test-case. This feature is really helpful to debug a failing test, so you don’t have to execute all of your tests. After you have fixed your test and before committing the changes you have to remove.onlyto ensure all tests are executed on your build system.This rule reminds you to remove
.onlyfrom your tests by raising a warning whenever you are using the exclusivity feature.
If you want to tie the eslint run to gulp - use the gulp-eslint plugin.
It might also be a good idea to run the gulp eslint task before commit in a git hook. We've used the pre-git package to install and keep track of the git hooks.
This way the focused or exclusive tests would not get into the codebase in the first place.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With