|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- # Enforce valid titles (`valid-title`)
-
- Checks that the title of Jest blocks are valid by ensuring that titles are:
-
- - not empty,
- - is a string,
- - not prefixed with their block name,
- - have no leading or trailing spaces
-
- ## Rule Details
-
- **emptyTitle**
-
- An empty title is not informative, and serves little purpose.
-
- Examples of **incorrect** code for this rule:
-
- ```js
- describe('', () => {});
- describe('foo', () => {
- it('', () => {});
- });
- it('', () => {});
- test('', () => {});
- xdescribe('', () => {});
- xit('', () => {});
- xtest('', () => {});
- ```
-
- Examples of **correct** code for this rule:
-
- ```js
- describe('foo', () => {});
- describe('foo', () => {
- it('bar', () => {});
- });
- test('foo', () => {});
- it('foo', () => {});
- xdescribe('foo', () => {});
- xit('foo', () => {});
- xtest('foo', () => {});
- ```
-
- **titleMustBeString**
-
- Titles for test blocks should always be a string.
-
- This is also applied to `describe` blocks by default, but can be turned off via
- the `ignoreTypeOfDescribeName` option:
-
- Examples of **incorrect** code for this rule:
-
- ```js
- it(123, () => {});
- describe(String(/.+/), () => {});
- describe(myFunction, () => {});
- xdescribe(myFunction, () => {});
- describe(6, function () {});
- ```
-
- Examples of **correct** code for this rule:
-
- ```js
- it('is a string', () => {});
- test('is a string', () => {});
- xtest('is a string', () => {});
- describe('is a string', () => {});
- describe.skip('is a string', () => {});
- fdescribe('is a string', () => {});
- ```
-
- Examples of **correct** code when `ignoreTypeOfDescribeName` is `true`:
-
- ```js
- it('is a string', () => {});
- test('is a string', () => {});
- xtest('is a string', () => {});
- describe('is a string', () => {});
- describe.skip('is a string', () => {});
- fdescribe('is a string', () => {});
-
- describe(String(/.+/), () => {});
- describe(myFunction, () => {});
- xdescribe(myFunction, () => {});
- describe(6, function () {});
- ```
-
- **duplicatePrefix**
-
- A `describe` / `test` block should not start with `duplicatePrefix`
-
- Examples of **incorrect** code for this rule
-
- ```js
- test('test foo', () => {});
- it('it foo', () => {});
-
- describe('foo', () => {
- test('test bar', () => {});
- });
-
- describe('describe foo', () => {
- test('bar', () => {});
- });
- ```
-
- Examples of **correct** code for this rule
-
- ```js
- test('foo', () => {});
- it('foo', () => {});
-
- describe('foo', () => {
- test('bar', () => {});
- });
- ```
-
- **accidentalSpace**
-
- A `describe` / `test` block should not contain accidentalSpace
-
- Examples of **incorrect** code for this rule
-
- ```js
- test(' foo', () => {});
- it(' foo', () => {});
-
- describe('foo', () => {
- test(' bar', () => {});
- });
-
- describe(' foo', () => {
- test('bar', () => {});
- });
-
- describe('foo ', () => {
- test('bar', () => {});
- });
- ```
-
- Examples of **correct** code for this rule
-
- ```js
- test('foo', () => {});
- it('foo', () => {});
-
- describe('foo', () => {
- test('bar', () => {});
- });
- ```
-
- ## Options
-
- ```ts
- interface Options {
- ignoreTypeOfDescribeName?: boolean;
- disallowedWords?: string[];
- mustNotMatch?: Partial<Record<'describe' | 'test' | 'it', string>> | string;
- mustMatch?: Partial<Record<'describe' | 'test' | 'it', string>> | string;
- }
- ```
-
- #### `ignoreTypeOfDescribeName`
-
- Default: `false`
-
- When enabled, the type of the first argument to `describe` blocks won't be
- checked.
-
- #### `disallowedWords`
-
- Default: `[]`
-
- A string array of words that are not allowed to be used in test titles. Matching
- is not case-sensitive, and looks for complete words:
-
- Examples of **incorrect** code when using `disallowedWords`:
-
- ```js
- // with disallowedWords: ['correct', 'all', 'every', 'properly']
- describe('the correct way to do things', () => {});
- it('has ALL the things', () => {});
- xdescribe('every single one of them', () => {});
- test(`that the value is set properly`, () => {});
- ```
-
- Examples of **correct** code when using `disallowedWords`:
-
- ```js
- // with disallowedWords: ['correct', 'all', 'every', 'properly']
- it('correctly sets the value', () => {});
- test('that everything is as it should be', () => {});
- describe('the proper way to handle things', () => {});
- ```
-
- #### `mustMatch` & `mustNotMatch`
-
- Defaults: `{}`
-
- Allows enforcing that titles must match or must not match a given Regular
- Expression. An object can be provided to apply different Regular Expressions to
- specific Jest test function groups (`describe`, `test`, and `it`).
-
- Examples of **incorrect** code when using `mustMatch`:
-
- ```js
- // with mustMatch: '^that'
- describe('the correct way to do things', () => {});
- fit('this there!', () => {});
-
- // with mustMatch: { test: '^that' }
- describe('the tests that will be run', () => {});
- test('the stuff works', () => {});
- xtest('errors that are thrown have messages', () => {});
- ```
-
- Examples of **correct** code when using `mustMatch`:
-
- ```js
- // with mustMatch: '^that'
- describe('that thing that needs to be done', () => {});
- fit('that this there!', () => {});
-
- // with mustMatch: { test: '^that' }
- describe('the tests that will be run', () => {});
- test('that the stuff works', () => {});
- xtest('that errors that thrown have messages', () => {});
- ```
|