Skip to content

Commit

Permalink
Merge pull request #114 from lo1tuma/additional-test-functions-member…
Browse files Browse the repository at this point in the history
…-expression

Support MemberExpression for additionalTestFunctions
  • Loading branch information
lo1tuma committed Dec 14, 2016
2 parents 0ab2f58 + 1cf41e4 commit 9ce0d5d
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 7 deletions.
9 changes: 6 additions & 3 deletions lib/rules/no-exclusive-tests.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict';

var getAdditionalTestFunctions = require('../util/settings').getAdditionalTestFunctions;
var getAdditionalTestFunctions = require('../util/settings').getAdditionalTestFunctions,
astUtils = require('../util/ast');

module.exports = function (context) {
var mochaTestFunctions = [
Expand All @@ -17,11 +18,13 @@ module.exports = function (context) {
mochaTestFunctions = mochaTestFunctions.concat(additionalTestFunctions);

function matchesMochaTestFunction(object) {
return object && mochaTestFunctions.indexOf(object.name) !== -1;
var name = astUtils.getNodeName(object);

return mochaTestFunctions.indexOf(name) !== -1;
}

function isPropertyNamedOnly(property) {
return property && (property.name === 'only' || property.value === 'only');
return property && astUtils.getPropertyName(property) === 'only';
}

function isCallToMochasOnlyFunction(callee) {
Expand Down
10 changes: 8 additions & 2 deletions lib/util/ast.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,13 @@ var describeAliases = [ 'describe', 'xdescribe', 'describe.only', 'describe.skip
'test', 'test.only', 'test.skip',
'specify', 'specify.only', 'specify.skip' ];

function getPropertyName(property) {
return property.name || property.value;
}

function getNodeName(node) {
if (node.type === 'MemberExpression') {
return node.object.name + '.' + node.property.name;
return getNodeName(node.object) + '.' + getPropertyName(node.property);
}
return node.name;
}
Expand All @@ -38,5 +42,7 @@ function isTestCase(node) {
module.exports = {
isDescribe: isDescribe,
isHookIdentifier: isHookIdentifier,
isTestCase: isTestCase
isTestCase: isTestCase,
getPropertyName: getPropertyName,
getNodeName: getNodeName
};
64 changes: 62 additions & 2 deletions test/rules/no-exclusive-tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,23 @@ ruleTester.run('no-exclusive-tests', rules['no-exclusive-tests'], {
'var calledOnly = it.only; calledOnly.call(it)',
'var dynamicOnly = "only"; suite[dynamicOnly]()',
'specify()',
'specify.skip()'
'specify.skip()',
{
code: 'a.b.c.skip()',
settings: {
mocha: {
additionalTestFunctions: [ 'a.b.c' ]
}
}
},
{
code: 'a[b].c.skip()',
settings: {
mocha: {
additionalTestFunctions: [ 'a.b.c' ]
}
}
}
],

invalid: [
Expand Down Expand Up @@ -105,7 +121,51 @@ ruleTester.run('no-exclusive-tests', rules['no-exclusive-tests'], {
}
},
errors: [ { message: expectedErrorMessage, column: 8, line: 1 } ]
},
{
code: 'foo.bar.only()',
settings: {
mocha: {
additionalTestFunctions: [ 'foo.bar' ]
}
},
errors: [ { message: expectedErrorMessage, column: 9, line: 1 } ]
},
{
code: 'foo.bar["only"]()',
settings: {
mocha: {
additionalTestFunctions: [ 'foo.bar' ]
}
},
errors: [ { message: expectedErrorMessage, column: 9, line: 1 } ]
},
{
code: 'foo["bar"].only()',
settings: {
mocha: {
additionalTestFunctions: [ 'foo.bar' ]
}
},
errors: [ { message: expectedErrorMessage, column: 12, line: 1 } ]
},
{
code: 'foo["bar"]["only"]()',
settings: {
mocha: {
additionalTestFunctions: [ 'foo.bar' ]
}
},
errors: [ { message: expectedErrorMessage, column: 12, line: 1 } ]
},
{
code: 'a.b.c.only()',
settings: {
mocha: {
additionalTestFunctions: [ 'a.b.c' ]
}
},
errors: [ { message: expectedErrorMessage, column: 7, line: 1 } ]
}
]

});

0 comments on commit 9ce0d5d

Please sign in to comment.