Files
zopu-code/repos/effect/.patterns/testing.md

1013 B

Testing Patterns

Testing Framework Selection

Use it.effect for tests that return Effects.

import { assert, describe, it } from "@effect/vitest"
import { Effect } from "effect"

it.effect("should work with Effects", () =>
  Effect.gen(function*() {
    const result = yield* someEffect
    assert.strictEqual(result, expectedValue)
  }))

Use regular it for pure synchronous TypeScript functions.

import { assert, describe, it } from "@effect/vitest"

it("should work with pure functions", () => {
  const result = pureFunction(input)
  assert.strictEqual(result, expectedValue)
})

Testing Rules

  • Never use Effect.runSync in tests
  • Never use expect from Vitest; use assert methods instead
  • Always use TestClock for time-dependent operations
  • Group related tests using describe

Type-Level Tests

Type-level tests are located in packages/*/typetest/ and use Tstyche.

Run targeted type-level tests with:

pnpm test-types <filename>