lib/rules/one-top-level-describe-per-test.js (41 lines of code) (raw):
'use strict';
module.exports = {
meta: {
docs: {
category: 'Stylistic Issues',
description:
'Ensure there is a single top-level `describe` block per test file',
recommended: true,
},
messages: {
error: 'Use only one top-level `describe` block in your test file.',
},
fixable: null,
schema: [],
},
create: (context) => {
const SOURCE_CODE = context.sourceCode ?? context.getSourceCode();
let numberOfDescribe = 0;
return {
CallExpression: (node) => {
const scope = SOURCE_CODE.getScope
? SOURCE_CODE.getScope(node)
: context.getScope();
if (!['global', 'module'].includes(scope.type)) {
return;
}
if (node.callee.name === 'describe') {
numberOfDescribe++;
}
},
'Program:exit': (node) => {
if (numberOfDescribe > 1) {
context.report({
node,
messageId: 'error',
});
}
},
};
},
};