chore: add ESLint, Prettier and Jest configuration

This commit is contained in:
Developer
2026-03-18 16:19:03 +08:00
parent 5dd00c310f
commit c1c7eb006b
5 changed files with 96 additions and 0 deletions
+7
View File
@@ -0,0 +1,7 @@
node_modules/
frontend/node_modules/
frontend/.next/
logs/
*.log
accountbook.db
.worktrees/
+19
View File
@@ -0,0 +1,19 @@
module.exports = {
root: true,
env: {
node: true,
es2021: true,
jest: true,
},
extends: ['eslint:recommended'],
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
},
rules: {
'no-console': 'off',
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'prefer-const': 'error',
'no-var': 'error',
},
};
+9
View File
@@ -0,0 +1,9 @@
{
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "es5",
"printWidth": 100,
"bracketSpacing": true,
"arrowParens": "always"
}
+6
View File
@@ -0,0 +1,6 @@
module.exports = {
testEnvironment: 'node',
roots: ['<rootDir>/server'],
testMatch: ['**/__tests__/**/*.test.js'],
verbose: true,
};
+55
View File
@@ -0,0 +1,55 @@
const {
isNonEmptyString,
isValidMonth,
isValidDateTime,
validateRecordPayload,
} = require('../utils/validators');
describe('Validators', () => {
describe('isNonEmptyString', () => {
test('returns true for non-empty string', () => {
expect(isNonEmptyString('hello')).toBe(true);
});
test('returns false for empty string', () => {
expect(isNonEmptyString('')).toBe(false);
});
test('returns false for non-string', () => {
expect(isNonEmptyString(123)).toBe(false);
expect(isNonEmptyString(null)).toBe(false);
});
});
describe('isValidMonth', () => {
test('returns true for valid month format', () => {
expect(isValidMonth('2024-01')).toBe(true);
});
test('returns false for invalid month format', () => {
expect(isValidMonth('2024-1')).toBe(false);
});
});
describe('validateRecordPayload', () => {
test('returns null for valid payload', () => {
const payload = {
type: 'expense',
amount: 100,
category: '餐饮',
date: '2024-01-15',
};
expect(validateRecordPayload(payload)).toBeNull();
});
test('returns error for invalid type', () => {
const payload = {
type: 'invalid',
amount: 100,
category: '餐饮',
date: '2024-01-15',
};
expect(validateRecordPayload(payload)).toBe('账目类型错误');
});
});
});