test(renderer): add failing test for cn() helper + vitest config

This commit is contained in:
2026-06-05 09:20:04 +05:30
parent 188e73d7c1
commit ea0f3f93bf
4 changed files with 58 additions and 0 deletions
+3
View File
@@ -8,6 +8,9 @@
"test": "jest", "test": "jest",
"test:watch": "jest --watch", "test:watch": "jest --watch",
"test:coverage": "jest --coverage", "test:coverage": "jest --coverage",
"test:renderer": "vitest run",
"test:renderer:watch": "vitest",
"test:renderer:coverage": "vitest run --coverage",
"lint": "eslint src tests", "lint": "eslint src tests",
"lint:fix": "eslint src tests --fix", "lint:fix": "eslint src tests --fix",
"format": "prettier --write src tests", "format": "prettier --write src tests",
+12
View File
@@ -0,0 +1,12 @@
import '@testing-library/jest-dom/vitest';
// Mock window.electronAPI for tests
declare global {
interface Window {
electronAPI: any;
}
}
if (typeof window !== 'undefined' && !window.electronAPI) {
window.electronAPI = {};
}
+20
View File
@@ -0,0 +1,20 @@
import { describe, it, expect } from 'vitest';
import { cn } from '@/lib/utils';
describe('cn', () => {
it('merges class names', () => {
expect(cn('a', 'b')).toBe('a b');
});
it('deduplicates conflicting tailwind classes', () => {
expect(cn('p-2', 'p-4')).toBe('p-4');
});
it('ignores falsy values', () => {
expect(cn('a', false, null, undefined, '', 'b')).toBe('a b');
});
it('accepts conditional class objects', () => {
expect(cn('base', { active: true, disabled: false })).toBe('base active');
});
});
+23
View File
@@ -0,0 +1,23 @@
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';
import path from 'path';
export default defineConfig({
plugins: [react()],
test: {
environment: 'jsdom',
globals: true,
setupFiles: ['./src/renderer/test/setup.ts'],
include: ['tests/**/*.{test,spec}.{ts,tsx}'],
coverage: {
provider: 'v8',
include: ['src/renderer/**/*.{ts,tsx}'],
exclude: ['src/renderer/test/**', 'src/renderer/**/*.test.*'],
},
},
resolve: {
alias: {
'@': path.join(__dirname, 'src/renderer'),
},
},
});