Custom Rules
Create and manage custom testing rules for your projects
Rule Types
Test Generation Rules
- Coverage requirements
- Test patterns
- Assertion types
- Mock strategies
Code Analysis Rules
- Complexity limits
- Style guidelines
- Security checks
- Performance rules
Validation Rules
- Input validation
- Output formats
- Error handling
- State management
Creating Rules
Rule Definition
// custom-rules.js
module.exports = {
rules: {
'require-try-catch': {
create: (context) => ({
CallExpression: (node) => {
if (isAsyncCall(node) && !isInTryCatch(node)) {
context.report({
node,
message: 'Async calls must be in try-catch blocks'
});
}
}
})
},
'test-naming-convention': {
create: (context) => ({
describe: (node) => {
if (!followsNamingPattern(node.name)) {
context.report({
node,
message: 'Test suite names must follow pattern: feature.behavior'
});
}
}
})
}
}
};
Rule Configuration
Configuration File
// aitotest.config.js
module.exports = {
rules: {
// Built-in rules
'coverage-threshold': ['error', { lines: 80, functions: 90 }],
'max-test-cases': ['warn', { max: 10 }],
// Custom rules
'require-try-catch': 'error',
'test-naming-convention': ['error', {
pattern: '^[a-z]+\.[a-z]+$'
}]
},
// Rule sets
extends: [
'aitotest:recommended',
'./custom-rules.js'
],
// Override for specific files
overrides: [{
files: ['**/legacy/**'],
rules: {
'coverage-threshold': 'off'
}
}]
}
Rule Examples
Coverage Rule
{
'min-coverage': {
create: (context) => ({
onTestComplete: (results) => {
const { coverage } = results;
if (coverage.lines < 80) {
context.report({
message: 'Line coverage below 80%'
});
}
}
})
}
}
Assertion Rule
{
'require-assertions': {
create: (context) => ({
TestCase: (node) => {
if (!hasAssertions(node)) {
context.report({
node,
message: 'Test must have assertions'
});
}
}
})
}
}
Rule Categories
Testing Rules
- Assertion count
- Test structure
- Mock usage
- Setup/teardown
Quality Rules
- Code duplication
- Complexity
- Naming patterns
- Documentation
Security Rules
- Input validation
- Authentication
- Data handling
- API security
Rule Management
Enabling/Disabling Rules
// Disable for line
// aitotest-disable-next-line rule-name
function test() {}
// Disable for block
/* aitotest-disable */
function test() {}
/* aitotest-enable */
Rule Severity
- "off" - Disable rule
- "warn" - Warning only
- "error" - Fail on violation
- "info" - Information only