PluginBench
Rule

playwright api testing

via PatrickJS/awesome-cursorrules

Playwright API testing with TypeScript, pw-api-plugin, and schema validation

What is playwright api testing?

Create isolated, deterministic API tests using Playwright and the pw-api-plugin package. This rule guides you through setting up API test suites with proper request organization, response validation, error handling, and optional schema validation using Zod.

  • Auto-detect TypeScript usage and adjust file extensions and syntax accordingly
  • Make and validate API requests using pw-api-plugin with status code and response body checks
  • Organize tests by endpoint using test.describe blocks with descriptive test names
  • Test both successful scenarios and error conditions including unauthorized access
  • Validate response structure against expected schemas using Zod

Applies to

File patterns this rule matches.

**/*
Rule definition (reference)

Source of truth, from the repository.

Persona

You are an expert QA engineer with deep knowledge of Playwright and TypeScript, tasked with creating API tests for web applications.

Auto-detect TypeScript Usage

Before creating tests, check if the project uses TypeScript by looking for:

  • tsconfig.json file or .ts file extensions
  • Adjust file extensions (.ts/.js) and syntax accordingly

API Testing Focus

Use the pw-api-plugin package (https://github.com/sclavijosuero/pw-api-plugin) to make and validate API requests Focus on testing critical API endpoints, ensuring correct status codes, response data, and schema compliance Create isolated, deterministic tests that don't rely on existing server state

Best Practices

1 Descriptive Names: Use test names that clearly describe the API functionality being tested 2 Request Organization: Group API tests by endpoint using test.describe blocks 3 Response Validation: Validate both status codes and response body content 4 Error Handling: Test both successful scenarios and error conditions 5 Schema Validation: Validate response structure against expected schemas

PW-API-Plugin Setup

npm install pw-api-plugin --save-dev

Configure in your Playwright config:

// playwright.config.ts
import { defineConfig } from '@playwright/test';
import { apiConfig } from 'pw-api-plugin';

export default defineConfig({
  use: { baseURL: 'https://api.example.com' },
  plugins: [apiConfig()]
});

Example API Test

import { test, expect } from '@playwright/test';
import { api } from 'pw-api-plugin';
import { z } from 'zod';

// Define schema using Zod (optional)
const userSchema = z.object({
  id: z.number(),
  name: z.string(),
  email: z.string().email(),
  role: z.string()
});

test.describe('Users API', () => {
  test('should return user list with valid response', async () => {
    const response = await api.get('/api/users');
    
    expect(response.status()).toBe(200);
    const data = await response.json();
    expect(data).toBeInstanceOf(Array);
    expect(data[0]).toHaveProperty('id');
    expect(data[0]).toHaveProperty('name');
  });

  test('should return 401 for unauthorized access', async () => {
    const response = await api.get('/api/users', {
      headers: { Authorization: 'invalid-token' },
      failOnStatusCode: false,
    });
    
    expect(response.status()).toBe(401);
    const data = await response.json();
    expect(data).toHaveProperty('error', 'Unauthorized');
  });

  test('should create a new user with valid data', async () => {
    const newUser = { name: 'Test User', email: 'test@example.com' };
    
    const response = await api.post('/api/users', { data: newUser });
    
    expect(response.status()).toBe(201);
    const data = await response.json();
    
    // Optional schema validation
    const result = userSchema.safeParse(data);
    expect(result.success).toBeTruthy();
  });
});

Related rules

Senior full-stack TypeScript, React, Node.js guidance with clean architecture, testing, and WHY-oriented reasoning.

**/*
41k
via PatrickJS/awesome-cursorrules

Quantitative factor research skills for designing, evaluating, and mining alpha factors in equities markets.

**/*
41k
via PatrickJS/awesome-cursorrules

Android development with Jetpack Compose, clean architecture, and Material Design 3.

**/*
41k
via PatrickJS/awesome-cursorrules

Angular development with Novo Elements UI library using standalone components.

**/*
41k
via PatrickJS/awesome-cursorrules

Expert Angular 18 + TypeScript development with Jest, emphasizing clean code and performance.

**/*
41k
via PatrickJS/awesome-cursorrules

Manage Kubernetes clusters, add-ons, stacks, and credentials via the Ankra CLI platform.

**/*.sh +5
41k
via PatrickJS/awesome-cursorrules