Snapshot testing: 1) Captures component/data structure output, 2) Saves as reference file, 3) Compares against future changes, 4) Helps detect unintended changes. Example: expect(component).toMatchSnapshot(). Useful for UI components and serializable data.
Custom matchers: 1) Created using expect.extend(), 2) Define matcher function with pass/message, 3) Can access expect context, 4) Support async matchers, 5) Can be shared across tests. Example: expect.extend({ toBeWithinRange(received, floor, ceiling) { ... } }).
Timeout handling: 1) Global timeout in jest.config.js, 2) Individual test timeouts using jest.setTimeout(), 3) Timeout option in test blocks, 4) Async test timeout handling, 5) Custom timeout messages. Default timeout is 5 seconds.
Common CLI options: 1) --watch for watch mode, 2) --coverage for coverage reports, 3) --verbose for detailed output, 4) --runInBand for sequential execution, 5) --testNamePattern for filtering tests. Can be configured in package.json scripts.
Test contexts provide: 1) Shared state within describe blocks, 2) Setup/teardown management, 3) Data sharing between tests, 4) Context-specific configurations, 5) Isolated test environments. Used through beforeAll/beforeEach hooks.
Jest setup involves: 1) Installing Jest using npm/yarn: 'npm install --save-dev jest', 2) Adding test script to package.json: { 'scripts': { 'test': 'jest' } }, 3) Creating test files with .test.js or .spec.js extensions, 4) Configuring Jest through jest.config.js if needed, 5) Setting up any required environment configurations.
Jest provides lifecycle hooks: 1) beforeAll() - runs once before all tests, 2) beforeEach() - runs before each test, 3) afterEach() - runs after each test, 4) afterAll() - runs once after all tests. Used for setup/cleanup operations. Example: setting up database connections, cleaning test data.
Different configurations through: 1) Multiple jest.config.js files, 2) Using --config flag, 3) Environment-specific configs, 4) Test setup files, 5) Custom test environments. Example: separating unit and integration test configs.
Complex async testing: 1) Multiple promise chains, 2) Parallel async operations, 3) Error handling scenarios, 4) Timeout management, 5) Race condition testing. Use async/await with proper error handling.
Custom environments: 1) Extending Jest's environment, 2) Implementing global setup/teardown, 3) Custom DOM implementation, 4) Environment-specific mocks, 5) Shared environment state. Used for specialized testing needs.
Jest is a JavaScript testing framework developed by Facebook that focuses on simplicity. Key features include: 1) Zero config setup for most JavaScript projects, 2) Snapshot testing, 3) Built-in code coverage reports, 4) Isolated test execution, 5) Interactive mode for test development, 6) Powerful mocking system, 7) Support for async testing.
A Jest test consists of: 1) describe blocks for grouping related tests, 2) it or test blocks for individual test cases, 3) expect statements for assertions. Example:
describe('MyFunction', () => {
it('should return correct value', () => {
expect(myFunction()).toBe(true);
});
});
Matchers are methods that let you test values in different ways. Common matchers include: 1) toBe() for exact equality, 2) toEqual() for deep equality, 3) toContain() for arrays/iterables, 4) toBeTruthy()/toBeFalsy() for boolean checks, 5) toMatch() for regex. Used with expect(): expect(value).matcher()
Async testing can be handled through: 1) Returning promises: return promise.then(), 2) Async/await: async () => { await result }, 3) Done callback: (done) => { process.then(done) }, 4) Resolves/rejects matchers: expect(promise).resolves.toBe(). Always ensure async operations complete before test ends.
Test isolation involves: 1) Using beforeEach/afterEach for setup/cleanup, 2) Avoiding shared state between tests, 3) Mocking external dependencies, 4) Using describe blocks for context separation, 5) Resetting mocks between tests using jest.clearAllMocks().
Environment variables handled through: 1) process.env in tests, 2) .env files with jest-environment, 3) setupFiles configuration, 4) CLI arguments, 5) Custom environment setup. Consider security and isolation of test environments.
Organization best practices: 1) Group related tests in describe blocks, 2) Use clear test descriptions, 3) Follow naming conventions (.test.js/.spec.js), 4) Organize test files alongside source code, 5) Separate unit and integration tests.
Test fixtures implementation: 1) Using beforeEach for setup, 2) Shared test data files, 3) Factory functions for test data, 4) Fixture cleanup in afterEach, 5) Module-level fixture definitions. Helps maintain consistent test data.
Test retry handling: 1) Configure retry attempts, 2) Implement retry logic, 3) Handle async retry scenarios, 4) Log retry attempts, 5) Analyze flaky test patterns. Use jest-retry for automated retries.
Advanced mocking includes: 1) Partial module mocking, 2) Mock implementation factories, 3) Complex return value sequences, 4) Mock instance methods, 5) Mock timers and events. Example: jest.spyOn() with complex implementations.
Performance testing: 1) Execution time measurements, 2) Memory usage tracking, 3) Performance benchmarks, 4) Resource utilization tests, 5) Performance regression detection. Use custom metrics and assertions.
Jest provides multiple mocking approaches: 1) jest.fn() for function mocking, 2) jest.mock() for module mocking, 3) jest.spyOn() for monitoring function calls, 4) Manual mocks using __mocks__ directory, 5) Automatic mocking of node_modules. Mocks help isolate code for testing.
Code coverage measures how much code is tested. Jest configuration: 1) Add --coverage flag to test command, 2) Configure coverage settings in jest.config.js, 3) Set coverage thresholds, 4) Specify files to include/exclude, 5) Generate coverage reports in different formats.