Best practices for writing JavaScript/TypeScript tests using Jest, including mocking strategies, test structure, and common patterns.
Jest testing best practices for JavaScript and TypeScript projects with mocking, async handling, and React patterns.
Organize tests with descriptive names in nested describe blocks, using .test.ts/.test.js files placed alongside source code or in __tests__ directories
Mock external dependencies with jest.mock(), jest.spyOn(), and mockImplementation(), resetting between tests to prevent state leakage
Handle async code with promises, async/await, and resolves/rejects matchers; set timeouts for slow tests
Test React components with React Testing Library, querying by accessibility roles and labels, and using userEvent for realistic interactions
Includes 20+ common matchers covering truthiness, numbers, strings, arrays, objects, exceptions, and mock function assertions
Test Structure
Name test files with .test.ts or .test.js suffix
Place test files next to the code they test or in a dedicated __tests__ directory
Use descriptive test names that explain the expected behavior
Use nested describe blocks to organize related tests
Follow the pattern: describe('Component/Function/Class', () => { it('should do something', () => {}) })
Effective Mocking
Mock external dependencies (APIs, databases, etc.) to isolate your tests
Use jest.mock() for module-level mocks
Use jest.spyOn() for specific function mocks
Use mockImplementation() or mockReturnValue() to define mock behavior
Reset mocks between tests with jest.resetAllMocks() in afterEach
Testing Async Code
Always return promises or use async/await syntax in tests
Use resolves/rejects matchers for promises
Set appropriate timeouts for slow tests with jest.setTimeout()don't have the plugin yet? install it then click "run inline in claude" again.