← Back to Discord Forum

Playwright + GitHub Actions "ReadableStream" error

I have the following GitHub Actions file and the tests fail with the following error Invalid state: ReadableStream is already closed.

Any idea what could be the issue?

name: Playwright Tests
    branches: [feat/refresh]
    branches: [feat/refresh]
    timeout-minutes: 60
    runs-on: ubuntu-latest
        image: postgres
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
          - 5432:5432
      NEXT_PRIVATE_DATABASE_URL: postgresql://postgres:postgres@localhost:5432/documenso
      NEXT_PRIVATE_DIRECT_DATABASE_URL: postgresql://postgres:postgres@localhost:5432/documenso
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
          node-version: 18
      - name: Generate package-lock.json
        run: npm cache clean --force && npm install
      - name: Install dependencies
        run: npm ci
      - name: Copy env
        run: cp .env.example .env
      - name: Install Playwright Browsers
        run: npx playwright install --with-deps
      - name: Install Prisma Client
        run: npm install @prisma/client
      - name: Generate Prisma Client
        run: npm run prisma:generate -w @documenso/prisma
      - name: Create the database
        run: npm run prisma:migrate-dev -w @documenso/prisma
      - name: Run Playwright tests
        run: npm run ci
      - uses: actions/upload-artifact@v3
        if: always()
          name: playwright-report
          path: playwright-report/
          retention-days: 30

This thread is trying to answer question "What could be the issue causing the 'Invalid state: ReadableStream is already closed' error in the GitHub Actions file?"

1 reply

My playwright.config.ts file:

import { defineConfig, devices } from '@playwright/test';

 * Read environment variables from file.
 * https://github.com/motdotla/dotenv
import { config as dotenvConfig } from 'dotenv';


export const STORAGE_STATE = 'playwright/.auth/user.json';

 * See https://playwright.dev/docs/test-configuration.
export default defineConfig({
  testDir: './src/tests/e2e',
  /* Run tests in files in parallel */
  fullyParallel: true,
  /* Fail the build on CI if you accidentally left test.only in the source code. */
  forbidOnly: !!process.env.CI,
  /* Retry on CI only */
  retries: process.env.CI ? 2 : 0,
  /* Opt out of parallel tests on CI. */
  workers: process.env.CI ? 1 : undefined,
  /* Reporter to use. See https://playwright.dev/docs/test-reporters */
  reporter: 'html',
  /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
  use: {
    /* Base URL to use in actions like `await page.goto('/')`. */
    baseURL: 'http://localhost:3000',

    /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
    trace: 'on-first-retry',
    navigationTimeout: 60 * 1000,

  /* Configure projects for major browsers */
  projects: [
    { name: 'setup', testMatch: '**/*.setup.ts' },
      name: 'Authenticated User Tests',
      testMatch: '*.authenticated.spec.ts',
      dependencies: ['setup', 'cleanup db'],
      use: {
        ...devices['Desktop Chrome'],
        storageState: STORAGE_STATE,
      name: 'Unauthenticated User Tests',
      dependencies: ['cleanup db'],
      use: {
        ...devices['Desktop Chrome'],
      testMatch: '*.unauthenticated.spec.ts',
      testIgnore: ['*.setup.ts', '*.authenticated.spec.ts'],
      name: 'cleanup db',
      testMatch: /global.teardown\.ts/,

  globalTeardown: './global.teardown.ts',

Related Discord Threads

AboutQuestionsDiscord ForumBrowser ExtensionTagsQA Jobs

Rayrun is a community for QA engineers. I am constantly looking for new ways to add value to people learning Playwright and other browser automation frameworks. If you have feedback, email luc@ray.run.