Back to Opik

Fixture Catalog

.agents/skills/playwright-e2e/fixture-catalog.md

2.0.24-52626.9 KB
Original Source

Fixture Catalog

All fixtures are in tests_end_to_end/typescript-tests/fixtures/. Tests import test and expect from the appropriate fixture file.

Fixture Hierarchy

@playwright/test (Playwright base)
    |
    v
base.fixture.ts (core fixtures)
    |
    +----> projects.fixture.ts
    +----> datasets.fixture.ts
    +----> tracing.fixture.ts
    +----> feedback-experiments-prompts.fixture.ts

Each feature fixture extends base, so all base fixtures are available in feature fixtures.

Base Fixtures (fixtures/base.fixture.ts)

Import: import { test, expect } from '../../fixtures/base.fixture'

FixtureTypeDescription
envConfigEnvConfigManagerEnvironment configuration (URLs, workspace)
helperClientTestHelperClientHTTP client for Flask test helper service
projectNamestringRandom project name (project_xxxxx)
datasetNamestringRandom dataset name (dataset_xxxxx)

The helperClient checks Flask service health on initialization and throws if unavailable.

Projects Fixtures (fixtures/projects.fixture.ts)

Import: import { test, expect } from '../../fixtures/projects.fixture'

Includes all base fixtures plus:

FixtureTypeDescriptionAuto-cleanup
createProjectApistringCreates a project via SDK, returns nameYes - deletes project after test
createProjectUistringCreates a project via UI, returns nameYes - deletes project after test
projectsPageProjectsPagePre-initialized ProjectsPage (navigated)No cleanup needed

Datasets Fixtures (fixtures/datasets.fixture.ts)

Import: import { test, expect } from '../../fixtures/datasets.fixture'

Includes all base fixtures plus:

FixtureTypeDescriptionAuto-cleanup
createDatasetSdkstringCreates a dataset via SDK, returns nameYes - deletes dataset after test
createDatasetUistringCreates a dataset via UI, returns nameYes - deletes dataset after test
datasetsPageDatasetsPagePre-initialized DatasetsPage (navigated)No cleanup needed

Tracing Fixtures (fixtures/tracing.fixture.ts)

Import: import { test, expect } from '../../fixtures/tracing.fixture'

Includes all base fixtures plus:

FixtureTypeDescriptionAuto-cleanup
tracesPageTracesPagePre-initialized TracesPageNo cleanup needed
threadsPageThreadsPagePre-initialized ThreadsPageNo cleanup needed
createTracesDecoratorvoidCreates 25 traces via decorator in a new projectYes - deletes project
createTracesClientvoidCreates 25 traces via client in a new projectYes - deletes project
createTracesWithSpansClient{traceConfig, spanConfig}Creates 5 traces with 2 spans each via clientYes - deletes project
createTracesWithSpansDecorator{traceConfig, spanConfig}Creates 5 traces with 2 spans each via decoratorYes - deletes project
createTraceWithAttachmentClientstringCreates a trace with attachment, returns attachment nameYes - deletes project
createTraceWithAttachmentDecoratorstringCreates a trace with attachment, returns attachment nameYes - deletes project
createTraceWithSpanAttachment{attachmentName, spanName}Creates trace+span with attachmentYes - deletes project
createThreadsDecoratorThreadConfig[]Creates 3 threads with 3 messages each via decoratorYes - deletes project
createThreadsClientThreadConfig[]Creates 3 threads with 3 messages each via clientYes - deletes project

Feedback, Experiments, and Prompts Fixtures (fixtures/feedback-experiments-prompts.fixture.ts)

Import: import { test, expect } from '../../fixtures/feedback-experiments-prompts.fixture'

Includes all base fixtures plus:

Feedback Scores

FixtureTypeDescriptionAuto-cleanup
feedbackScoresPageFeedbackScoresPagePre-initialized FeedbackScoresPageNo cleanup needed
createCategoricalFeedbackFeedbackDefinitionCreates categorical feedback def {a:1, b:2}Yes - deletes by ID
createNumericalFeedbackFeedbackDefinitionCreates numerical feedback def [0, 1]Yes - deletes by ID

Experiments

FixtureTypeDescriptionAuto-cleanup
experimentsPageExperimentsPagePre-initialized ExperimentsPageNo cleanup needed
createExperimentExperimentCreates dataset + experimentYes - deletes both
createExperimentWithItems{experiment, datasetSize}Creates dataset with 10 items + experimentYes - deletes both

Prompts

FixtureTypeDescriptionAuto-cleanup
promptsPagePromptsPagePre-initialized PromptsPageNo cleanup needed
promptDetailsPagePromptDetailsPagePre-initialized PromptDetailsPageNo cleanup needed
createPromptPromptCreates a prompt with default textYes - deletes by name

Fixture Usage Patterns

Basic test with SDK resource

typescript
import { test, expect } from '../../fixtures/projects.fixture';

test('Test name @tags', async ({ page, helperClient, createProjectApi }) => {
  // createProjectApi is the project name (string)
  // Project was created before this line runs
  // Project will be deleted after test completes (even on failure)
});

Test needing only page objects (no pre-created resources)

typescript
import { test, expect } from '../../fixtures/datasets.fixture';

test('Test name @tags', async ({ page, datasetsPage }) => {
  // datasetsPage is already navigated to the datasets page
  await datasetsPage.createDatasetByName('my-dataset');
});

Test with manual cleanup (when fixture can't handle it)

typescript
import { test, expect } from '../../fixtures/projects.fixture';

test('Test name @tags', async ({ page, helperClient, createProjectApi }) => {
  const newName = 'updated_name';
  let nameUpdated = false;

  try {
    await helperClient.updateProject(createProjectApi, newName);
    nameUpdated = true;
    // ... verification ...
  } finally {
    // Manual cleanup because fixture doesn't know about the new name
    if (nameUpdated) {
      await helperClient.deleteProject(newName);
    }
  }
});

Test with tracing (project created by fixture)

typescript
import { test, expect } from '../../fixtures/tracing.fixture';

test('Test name @tags', async ({ page, projectName, createTracesClient, tracesPage }) => {
  // At this point:
  // - A project named `projectName` exists
  // - 25 traces have been created in it
  // - tracesPage is ready to use (but needs navigation to the project first)
});