Skip to content

Commit

Permalink
Merge pull request #34 from lo1tuma/autofix-no-exclusive-tests
Browse files Browse the repository at this point in the history
Implement autofix for no-exclusive-tests
  • Loading branch information
Alexander Schmidt committed Sep 17, 2015
2 parents bc41d40 + d0f90e7 commit dbc7f12
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 12 deletions.
2 changes: 1 addition & 1 deletion docs/rules/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Rules

* [no-exclusive-tests](no-exclusive-tests.md) - disallow exclusive mocha tests
* [no-exclusive-tests](no-exclusive-tests.md) - disallow exclusive mocha tests (fixable)
* [handle-done-callback](handle-done-callback.md) - enforces handling of callbacks for async tests
* [no-synchronous-tests](no-synchronous-tests.md) - disallow synchronous tests
2 changes: 2 additions & 0 deletions docs/rules/no-exclusive-tests.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ After you have fixed your test and before committing the changes you have to rem

This rule reminds you to remove `.only` from your tests by raising a warning whenever you are using the exclusivity feature.

**Fixable:** Problems detected by this rule are automatically fixable using the `--fix` flag on the command line.

## Rule Details

This rule looks for every `describe.only`, `it.only`, `suite.only`, `test.only` and `context.only` occurrences within the source code.
Expand Down
16 changes: 15 additions & 1 deletion lib/rules/no-exclusive-tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,26 @@ module.exports = function (context) {
isPropertyNamedOnly(callee.property);
}

function createAutofixFunction(callee) {
var endRangeOfMemberExpression = callee.range[1],
endRangeOfMemberExpressionObject = callee.object.range[1],
rangeToRemove = [ endRangeOfMemberExpressionObject, endRangeOfMemberExpression ];

return function removeOnlyProperty(fixer) {
return fixer.removeRange(rangeToRemove);
};
}

return {
CallExpression: function (node) {
var callee = node.callee;

if (callee && isCallToMochasOnlyFunction(callee)) {
context.report(callee.property, 'Unexpected exclusive mocha test.');
context.report({
node: callee.property,
message: 'Unexpected exclusive mocha test.',
fix: createAutofixFunction(callee)
});
}
}
};
Expand Down
30 changes: 20 additions & 10 deletions test/rules/no-exclusive-tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,43 +26,53 @@ ruleTester.run('no-exclusive-tests', rules['no-exclusive-tests'], {
invalid: [
{
code: 'describe.only()',
errors: [ { message: expectedErrorMessage, column: 10, line: 1 } ]
errors: [ { message: expectedErrorMessage, column: 10, line: 1 } ],
output: 'describe()'
},
{
code: 'describe["only"]()',
errors: [ { message: expectedErrorMessage, column: 10, line: 1 } ]
errors: [ { message: expectedErrorMessage, column: 10, line: 1 } ],
output: 'describe()'
},
{
code: 'it.only()',
errors: [ { message: expectedErrorMessage, column: 4, line: 1 } ]
errors: [ { message: expectedErrorMessage, column: 4, line: 1 } ],
output: 'it()'
},
{
code: 'it["only"]()',
errors: [ { message: expectedErrorMessage, column: 4, line: 1 } ]
errors: [ { message: expectedErrorMessage, column: 4, line: 1 } ],
output: 'it()'
},
{
code: 'suite.only()',
errors: [ { message: expectedErrorMessage, column: 7, line: 1 } ]
errors: [ { message: expectedErrorMessage, column: 7, line: 1 } ],
output: 'suite()'
},
{
code: 'suite["only"]()',
errors: [ { message: expectedErrorMessage, column: 7, line: 1 } ]
errors: [ { message: expectedErrorMessage, column: 7, line: 1 } ],
output: 'suite()'
},
{
code: 'test.only()',
errors: [ { message: expectedErrorMessage, column: 6, line: 1 } ]
errors: [ { message: expectedErrorMessage, column: 6, line: 1 } ],
output: 'test()'
},
{
code: 'test["only"]()',
errors: [ { message: expectedErrorMessage, column: 6, line: 1 } ]
errors: [ { message: expectedErrorMessage, column: 6, line: 1 } ],
output: 'test()'
},
{
code: 'context.only()',
errors: [ { message: expectedErrorMessage, column: 9, line: 1 } ]
errors: [ { message: expectedErrorMessage, column: 9, line: 1 } ],
output: 'context()'
},
{
code: 'context["only"]()',
errors: [ { message: expectedErrorMessage, column: 9, line: 1 } ]
errors: [ { message: expectedErrorMessage, column: 9, line: 1 } ],
output: 'context()'
}
]

Expand Down

0 comments on commit dbc7f12

Please sign in to comment.