You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

66 lines
2.5 KiB

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RULE_NAME = void 0;
const utils_1 = require("@typescript-eslint/utils");
const create_testing_library_rule_1 = require("../create-testing-library-rule");
const node_utils_1 = require("../node-utils");
exports.RULE_NAME = 'no-wait-for-snapshot';
const SNAPSHOT_REGEXP = /^(toMatchSnapshot|toMatchInlineSnapshot)$/;
exports.default = (0, create_testing_library_rule_1.createTestingLibraryRule)({
name: exports.RULE_NAME,
meta: {
type: 'problem',
docs: {
description: 'Ensures no snapshot is generated inside of a `waitFor` call',
recommendedConfig: {
dom: 'error',
angular: 'error',
react: 'error',
vue: 'error',
marko: 'error',
},
},
messages: {
noWaitForSnapshot: "A snapshot can't be generated inside of a `{{ name }}` call",
},
schema: [],
},
defaultOptions: [],
create(context, _, helpers) {
function getClosestAsyncUtil(node) {
let n = node;
do {
const callExpression = (0, node_utils_1.findClosestCallExpressionNode)(n);
if (!callExpression) {
return null;
}
if (utils_1.ASTUtils.isIdentifier(callExpression.callee) &&
helpers.isAsyncUtil(callExpression.callee)) {
return callExpression.callee;
}
if ((0, node_utils_1.isMemberExpression)(callExpression.callee) &&
utils_1.ASTUtils.isIdentifier(callExpression.callee.property) &&
helpers.isAsyncUtil(callExpression.callee.property)) {
return callExpression.callee.property;
}
if (callExpression.parent) {
n = (0, node_utils_1.findClosestCallExpressionNode)(callExpression.parent);
}
} while (n !== null);
return null;
}
return {
[`Identifier[name=${SNAPSHOT_REGEXP}]`](node) {
const closestAsyncUtil = getClosestAsyncUtil(node);
if (closestAsyncUtil === null) {
return;
}
context.report({
node,
messageId: 'noWaitForSnapshot',
data: { name: closestAsyncUtil.name },
});
},
};
},
});