2020-03-07 11:45:40 +08:00
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . default = void 0 ;
var _utils = require ( "./utils" ) ;
var _default = ( 0 , _utils . createRule ) ( {
name : _ _filename ,
meta : {
docs : {
description : 'Prefer using toThrow for exception tests' ,
category : 'Best Practices' ,
recommended : false
} ,
messages : {
noTryExpect : [ 'Tests should use Jest‘ s exception helpers.' , 'Use "expect(() => yourFunction()).toThrow()" for synchronous tests,' , 'or "await expect(yourFunction()).rejects.toThrow()" for async tests' ] . join ( ' ' )
} ,
type : 'problem' ,
schema : [ ]
} ,
defaultOptions : [ ] ,
create ( context ) {
let isTest = false ;
let catchDepth = 0 ;
function isThrowExpectCall ( node ) {
return catchDepth > 0 && ( 0 , _utils . isExpectCall ) ( node ) ;
}
return {
CallExpression ( node ) {
if ( ( 0 , _utils . isTestCase ) ( node ) ) {
isTest = true ;
} else if ( isTest && isThrowExpectCall ( node ) ) {
context . report ( {
messageId : 'noTryExpect' ,
node
} ) ;
}
} ,
2020-03-31 20:40:00 +08:00
FunctionDeclaration ( node ) {
const declaredVariables = context . getDeclaredVariables ( node ) ;
const testCallExpressions = ( 0 , _utils . getTestCallExpressionsFromDeclaredVariables ) ( declaredVariables ) ;
if ( testCallExpressions . length > 0 ) {
isTest = true ;
}
} ,
2020-03-07 11:45:40 +08:00
CatchClause ( ) {
if ( isTest ) {
++ catchDepth ;
}
} ,
'CatchClause:exit' ( ) {
if ( isTest ) {
-- catchDepth ;
}
} ,
'CallExpression:exit' ( node ) {
if ( ( 0 , _utils . isTestCase ) ( node ) ) {
isTest = false ;
}
2020-03-31 20:40:00 +08:00
} ,
'FunctionDeclaration:exit' ( node ) {
const declaredVariables = context . getDeclaredVariables ( node ) ;
const testCallExpressions = ( 0 , _utils . getTestCallExpressionsFromDeclaredVariables ) ( declaredVariables ) ;
if ( testCallExpressions . length > 0 ) {
isTest = false ;
}
2020-03-07 11:45:40 +08:00
}
} ;
}
} ) ;
exports . default = _default ;