# Have control over `test` and `it` usages (consistent-test-it) Jest allows you to choose how you want to define your tests, using the `it` or the `test` keywords, with multiple permutations for each: - **it:** `it`, `xit`, `fit`, `it.only`, `it.skip`. - **test:** `test`, `xtest`, `test.only`, `test.skip`. This rule gives you control over the usage of these keywords in your codebase. ## Rule Details This rule can be configured as follows ```js { type: 'object', properties: { fn: { enum: ['it', 'test'], }, withinDescribe: { enum: ['it', 'test'], }, }, additionalProperties: false, } ``` #### fn Decides whether to use `test` or `it`. #### withinDescribe Decides whether to use `test` or `it` within a describe scope. ```js /*eslint jest/consistent-test-it: ["error", {"fn": "test"}]*/ test('foo'); // valid test.only('foo'); // valid it('foo'); // invalid it.only('foo'); // invalid ``` ```js /*eslint jest/consistent-test-it: ["error", {"fn": "it"}]*/ it('foo'); // valid it.only('foo'); // valid test('foo'); // invalid test.only('foo'); // invalid ``` ```js /*eslint jest/consistent-test-it: ["error", {"fn": "it", "withinDescribe": "test"}]*/ it('foo'); // valid describe('foo', function() { test('bar'); // valid }); test('foo'); // invalid describe('foo', function() { it('bar'); // invalid }); ``` ### Default configuration The default configuration forces top level test to use `test` and all tests nested within describe to use `it`. ```js /*eslint jest/consistent-test-it: ["error"]*/ test('foo'); // valid describe('foo', function() { it('bar'); // valid }); it('foo'); // invalid describe('foo', function() { test('bar'); // invalid }); ```