Skip to content

Commit

Permalink
feat(rules): adds no-if rule
Browse files Browse the repository at this point in the history
  • Loading branch information
Matt Seccafien committed Jul 7, 2019
1 parent e901d03 commit 31d6b20
Show file tree
Hide file tree
Showing 6 changed files with 524 additions and 1 deletion.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ installations requiring long-term consistency.
| [no-focused-tests][] | Disallow focused tests | ![recommended][] | |
| [no-hooks][] | Disallow setup and teardown hooks | | |
| [no-identical-title][] | Disallow identical titles | ![recommended][] | |
| [no-if][] | Disallow conditional logic | | |
| [no-jasmine-globals][] | Disallow Jasmine globals | ![recommended][] | ![fixable-yellow][] |
| [no-jest-import][] | Disallow importing `jest` | ![recommended][] | |
| [no-mocks-import][] | Disallow manually importing from `__mocks__` | | |
Expand Down Expand Up @@ -163,6 +164,7 @@ https://github.com/dangreenisrael/eslint-plugin-jest-formatting
[no-focused-tests]: docs/rules/no-focused-tests.md
[no-hooks]: docs/rules/no-hooks.md
[no-identical-title]: docs/rules/no-identical-title.md
[no-if]: docs/rules/no-if.md
[no-jasmine-globals]: docs/rules/no-jasmine-globals.md
[no-jest-import]: docs/rules/no-jest-import.md
[no-mocks-import]: docs/rules/no-mocks-import.md
Expand Down
53 changes: 53 additions & 0 deletions docs/rules/no-if.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Disallow conditional logic. (no-if)

Conditional logic in tests is usually an indication that a test is attempting to
cover too much, and not testing the logic it intends to. Each branch of code
executing within an if statement will usually be better served by a test devoted
to it.

Conditionals are often used in to satisfy the typescript type checker when using
a non-null assertion operator (!) would work.

## Rule Details

This rule prevents the use of if/ else statements and conditional (ternary)
operations in tests.

The following patterns are considered warnings:

```js
it('foo', () => {
if ('bar') {
// an if statement here is invalid
// you are probably testing too much
}
});

it('foo', () => {
const bar = foo ? 'bar' : null;
});
```

These patterns would not be considered warnings:

```js
it('foo', () => {
// only test the 'foo' case
});

it('bar', () => {
// test the 'bar' case separately
});

it('foo', () => {
function foo(bar) {
// nested functions are valid
return foo ? bar : null;
}
});
```

## When Not To Use It

If you do not wish to prevent the use of if statements in tests, you can safely
disable this rule.
2 changes: 1 addition & 1 deletion src/__tests__/rules.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const path = require('path');
const { rules } = require('../');

const ruleNames = Object.keys(rules);
const numberOfRules = 32;
const numberOfRules = 33;

describe('rules', () => {
it('should have a corresponding doc for each rule', () => {
Expand Down
Loading

0 comments on commit 31d6b20

Please sign in to comment.