Skip to content

Latest commit

 

History

History
85 lines (68 loc) · 1.72 KB

no-conditional-in-test.md

File metadata and controls

85 lines (68 loc) · 1.72 KB

Disallow conditional logic in tests (no-conditional-in-test)

💼 This rule is enabled in the following configs: all.

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 a conditional statement will usually be better served by a test devoted to it.

Rule details

This rule reports on any use of a conditional statement such as if, switch, and ternary expressions.

Examples of incorrect code for this rule:

it('foo', () => {
  if (true) {
    doTheThing();
  }
});

it('bar', () => {
  switch (mode) {
    case 'none':
      generateNone();
    case 'single':
      generateOne();
    case 'multiple':
      generateMany();
  }

  expect(fixtures.length).toBeGreaterThan(-1);
});

it('baz', async () => {
  const promiseValue = () => {
    return something instanceof Promise
      ? something
      : Promise.resolve(something);
  };

  await expect(promiseValue()).resolves.toBe(1);
});

Examples of correct code for this rule:

describe('my tests', () => {
  if (true) {
    it('foo', () => {
      doTheThing();
    });
  }
});

beforeEach(() => {
  switch (mode) {
    case 'none':
      generateNone();
    case 'single':
      generateOne();
    case 'multiple':
      generateMany();
  }
});

it('bar', () => {
  expect(fixtures.length).toBeGreaterThan(-1);
});

const promiseValue = something => {
  return something instanceof Promise ? something : Promise.resolve(something);
};

it('baz', async () => {
  await expect(promiseValue()).resolves.toBe(1);
});