1. Faker inside of steps

Faker library is pre-installed and is available for calling inside of js snippets. This approach is good when you need to generate data during execution of a test.

2. Use fixtures to create data before tests

Fixtures are great for inserting data into database before tests are started, and cleaning up after tests are finished.

src/data-helpers/user.ts
import { faker } from '@faker-js/faker'

import { APIClient } from './src/api-client'
import { User } from './src/data-helpers/types'

export async function createRandomUser(apiClient: APIClient, role: string): Promise<User> {
  const user: User = {
    userId: faker.string.uuid(),
    username: faker.internet.username(),
    email: faker.internet.email(),
    avatar: faker.image.avatar(),
    password: faker.internet.password(),
    birthdate: faker.date.birthdate(),
    registeredAt: faker.date.past(),
    role,
  };

  // Insert user into database by using API of your app
  await apiClient.createUser(user)

  return user
}
fixtures.ts
import { Fixtures, TestFixtures, WorkerFixtures } from 'inspecter/core'

import { APIClient } from './src/api-client'
import { User, createRandomUser } from './src/data-helpers'

export interface E2ETestFixtures extends TestFixtures, WorkerFixtures {
}

export interface E2EWorkerFixtures extends WorkerFixtures {
  apiClient: APIClient
  adminUser: string
}

export const fixtures: Fixtures<E2ETestFixtures, E2EWorkerFixtures> = {
  apiClient: [
    async ({}, use) => {
      const client = new APIClient()
      await use(client)
    },
    { scope: 'worker' },
  ],
  adminUser: [
    async ({ apiClient }, use) => {
      const user = await createRandomUser(apiClient, 'admin')
      await use(user)

      // Cleanup database after tests are finished
      await apiClient.deleteUser(user.userId)
    },
    { scope: 'worker' },
  ],
}