debt-collector
Version:
a nodejs tool to identify, track and mesure technical debt
67 lines (66 loc) • 2.63 kB
JavaScript
// @vitest-environment jsdom
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { renderHook, act } from '@testing-library/react-hooks';
import { useDevLogger } from './useDevLogger.js';
describe('useDevLogger', () => {
const originalEnv = process.env['NODE_ENV'];
beforeEach(() => {
process.env['NODE_ENV'] = 'development';
});
afterEach(() => {
process.env['NODE_ENV'] = originalEnv;
});
it('should maintain log history', () => {
const { result } = renderHook(() => useDevLogger());
act(() => {
result.current.info('First message');
result.current.warn('Second message', { data: 'test' });
});
const logs = result.current.logs;
expect(logs).toHaveLength(2);
expect(logs[0]?.message).toBe('First message');
expect(logs[1]?.message).toBe('Second message');
expect(logs[1]?.data).toEqual({ data: 'test' });
});
it('should not add logs in production mode', () => {
process.env['NODE_ENV'] = 'production';
const { result } = renderHook(() => useDevLogger());
act(() => {
result.current.info('Test message');
});
expect(result.current.logs).toHaveLength(0);
});
it('should clear logs when clear is called', () => {
const { result } = renderHook(() => useDevLogger());
act(() => {
result.current.info('Test message');
result.current.clear();
});
expect(result.current.logs).toHaveLength(0);
});
it('should add logs with different levels', () => {
const { result } = renderHook(() => useDevLogger());
act(() => {
result.current.info('Info message');
result.current.warn('Warn message');
result.current.error('Error message');
result.current.debug('Debug message');
});
const logs = result.current.logs;
expect(logs).toHaveLength(4);
expect(logs[0]?.level).toBe('info');
expect(logs[1]?.level).toBe('warn');
expect(logs[2]?.level).toBe('error');
expect(logs[3]?.level).toBe('debug');
});
it('should include timestamp in log entries', () => {
const { result } = renderHook(() => useDevLogger());
act(() => {
result.current.info('Test message');
});
const firstLog = result.current.logs[0];
expect(firstLog?.timestamp).toBeDefined();
expect(typeof firstLog?.timestamp).toBe('string');
expect(firstLog?.timestamp).toMatch(/^\d{2}:\d{2}:\d{2}/);
});
});