Modern Frontend Testing Strategies - React Testing Library, MSW, Vitest - Maulana Sodiqin

Modern Frontend Testing Strategies

10 min read
TestingReactTDD

Modern Frontend Testing Strategies

Testing Philosophy

Modern frontend testing emphasizes user-centric testing approaches that focus on behavior rather than implementation details.

Testing Stack

React Testing Library

Focus on testing components as users would interact with them:

import { render, screen, fireEvent } from "@testing-library/react";
import { LoginForm } from "./LoginForm";

test("submits form with username and password", async () => {
  const mockSubmit = jest.fn();
  render(<LoginForm onSubmit={mockSubmit} />);
  
  fireEvent.change(screen.getByLabelText(/username/i), {
    target: { value: "testuser" }
  });
  
  fireEvent.change(screen.getByLabelText(/password/i), {
    target: { value: "password123" }
  });
  
  fireEvent.click(screen.getByRole("button", { name: /sign in/i }));
  
  expect(mockSubmit).toHaveBeenCalledWith({
    username: "testuser",
    password: "password123"
  });
});

Mock Service Worker (MSW)

MSW allows you to mock API calls at the network level:

import { rest } from "msw";
import { setupServer } from "msw/node";

const server = setupServer(
  rest.get("/api/user", (req, res, ctx) => {
    return res(ctx.json({ name: "John Doe" }));
  })
);

beforeAll(() => server.listen());
afterEach(() => server.resetHandlers());
afterAll(() => server.close());

Vitest

Fast, modern test runner with great TypeScript support:

import { describe, it, expect } from "vitest";
import { calculateTotal } from "./utils";

describe("calculateTotal", () => {
  it("should calculate total with tax", () => {
    expect(calculateTotal(100, 0.1)).toBe(110);
  });
});

TDD Workflow

  1. Write failing test
  2. Write minimal code to pass
  3. Refactor while keeping tests green
  4. Repeat

Best Practices

  • Test behavior, not implementation
  • Use semantic queries (getByRole, getByLabelText)
  • Mock external dependencies
  • Keep tests simple and focused

Conclusion

Modern testing tools make it easier than ever to write reliable, maintainable tests that give you confidence in your applications.