UNPKG

eslint-plugin-jest

Version:
145 lines (125 loc) 4.03 kB
'use strict'; const _require = require('./util'), getDocsUrl = _require.getDocsUrl, getNodeName = _require.getNodeName, scopeHasLocalReference = _require.scopeHasLocalReference; module.exports = { meta: { docs: { url: getDocsUrl(__filename) }, fixable: 'code', messages: { illegalGlobal: 'Illegal usage of global `{{ global }}`, prefer `{{ replacement }}`', illegalMethod: 'Illegal usage of `{{ method }}`, prefer `{{ replacement }}`', illegalFail: 'Illegal usage of `fail`, prefer throwing an error, or the `done.fail` callback', illegalPending: 'Illegal usage of `pending`, prefer explicitly skipping a test using `test.skip`', illegalJasmine: 'Illegal usage of jasmine global' } }, create(context) { return { CallExpression(node) { const calleeName = getNodeName(node.callee); if (!calleeName) { return; } if (calleeName === 'spyOn' || calleeName === 'spyOnProperty' || calleeName === 'fail' || calleeName === 'pending') { if (scopeHasLocalReference(context.getScope(), calleeName)) { // It's a local variable, not a jasmine global. return; } switch (calleeName) { case 'spyOn': case 'spyOnProperty': context.report({ node, messageId: 'illegalGlobal', data: { global: calleeName, replacement: 'jest.spyOn' } }); break; case 'fail': context.report({ node, messageId: 'illegalFail' }); break; case 'pending': context.report({ node, messageId: 'illegalPending' }); break; } return; } if (calleeName.startsWith('jasmine.')) { const functionName = calleeName.replace('jasmine.', ''); if (functionName === 'any' || functionName === 'anything' || functionName === 'arrayContaining' || functionName === 'objectContaining' || functionName === 'stringMatching') { context.report({ fix(fixer) { return [fixer.replaceText(node.callee.object, 'expect')]; }, node, messageId: 'illegalMethod', data: { method: calleeName, replacement: `expect.${functionName}` } }); return; } if (functionName === 'addMatchers') { context.report({ node, messageId: 'illegalMethod', data: { method: calleeName, replacement: `expect.extend` } }); return; } if (functionName === 'createSpy') { context.report({ node, messageId: 'illegalMethod', data: { method: calleeName, replacement: 'jest.fn' } }); return; } context.report({ node, messageId: 'illegalJasmine' }); } }, MemberExpression(node) { if (node.object.name === 'jasmine') { if (node.parent.type === 'AssignmentExpression') { if (node.property.name === 'DEFAULT_TIMEOUT_INTERVAL') { context.report({ fix(fixer) { return [fixer.replaceText(node.parent, `jest.setTimeout(${node.parent.right.value})`)]; }, node, messageId: 'illegalJasmine' }); return; } context.report({ node, messageId: 'illegalJasmine' }); } } } }; } };