effect-vitest
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseEntry Point
入口点
ts
import { it, expect } from "@effect/vitest"| Feature | Description |
|---|---|
| Injects |
| Uses live Effect environment (real clock, logging) |
| Provides a |
| Combines |
| Retries flaky tests until success or timeout |
ts
import { it, expect } from "@effect/vitest"| 特性 | 说明 |
|---|---|
| 注入 |
| 使用真实的Effect环境(真实时钟、日志) |
| 提供 |
| 结合 |
| 重试不稳定测试直到成功或超时 |
Basic Tests
基础测试
ts
import { it, expect } from "@effect/vitest"
import { Effect } from "effect"
it.effect("test success", () =>
Effect.gen(function* () {
const result = yield* Effect.succeed(42)
expect(result).toBe(42)
})
)ts
import { it, expect } from "@effect/vitest"
import { Effect } from "effect"
it.effect("test success", () =>
Effect.gen(function* () {
const result = yield* Effect.succeed(42)
expect(result).toBe(42)
})
)Testing Failures with Exit
使用Exit测试失败场景
ts
import { it, expect } from "@effect/vitest"
import { Effect, Exit } from "effect"
it.effect("test failure", () =>
Effect.gen(function* () {
const result = yield* Effect.exit(Effect.fail("oops"))
expect(result).toStrictEqual(Exit.fail("oops"))
})
)ts
import { it, expect } from "@effect/vitest"
import { Effect, Exit } from "effect"
it.effect("test failure", () =>
Effect.gen(function* () {
const result = yield* Effect.exit(Effect.fail("oops"))
expect(result).toStrictEqual(Exit.fail("oops"))
})
)TestClock
TestClock
it.effectTestClock0it.livets
import { it } from "@effect/vitest"
import { Clock, Effect, TestClock } from "effect"
it.effect("with simulated time", () =>
Effect.gen(function* () {
yield* TestClock.adjust("1000 millis")
const now = yield* Clock.currentTimeMillis
// now === 1000
})
)
it.live("with real time", () =>
Effect.gen(function* () {
const now = yield* Clock.currentTimeMillis
// now === actual system time
})
)it.effect0TestClockit.livets
import { it } from "@effect/vitest"
import { Clock, Effect, TestClock } from "effect"
it.effect("with simulated time", () =>
Effect.gen(function* () {
yield* TestClock.adjust("1000 millis")
const now = yield* Clock.currentTimeMillis
// now === 1000
})
)
it.live("with real time", () =>
Effect.gen(function* () {
const now = yield* Clock.currentTimeMillis
// now === actual system time
})
)Scoped Tests
作用域测试
Use when your test acquires resources.
it.scopedts
import { it } from "@effect/vitest"
import { Console, Effect } from "effect"
const resource = Effect.acquireRelease(
Console.log("acquire"),
() => Console.log("release")
)
it.scoped("manages resources", () =>
Effect.gen(function* () {
yield* resource // automatically released after test
})
)当测试需要获取资源时,使用。
it.scopedts
import { it } from "@effect/vitest"
import { Console, Effect } from "effect"
const resource = Effect.acquireRelease(
Console.log("acquire"),
() => Console.log("release")
)
it.scoped("manages resources", () =>
Effect.gen(function* () {
yield* resource // automatically released after test
})
)Flaky Tests
不稳定测试(Flaky Tests)
ts
import { it } from "@effect/vitest"
import { Effect, Random } from "effect"
const flaky = Effect.gen(function* () {
if (yield* Random.nextBoolean) return yield* Effect.fail("random failure")
})
it.effect("retry until success", () =>
it.flakyTest(flaky, "5 seconds")
)ts
import { it } from "@effect/vitest"
import { Effect, Random } from "effect"
const flaky = Effect.gen(function* () {
if (yield* Random.nextBoolean) return yield* Effect.fail("random failure")
})
it.effect("retry until success", () =>
it.flakyTest(flaky, "5 seconds")
)Test Modifiers
测试修饰符
ts
it.effect.skip("skipped test", () => Effect.void)
it.effect.only("run only this", () => Effect.void)
it.effect.fails("expected to fail", () => Effect.fail("expected"))ts
it.effect.skip("skipped test", () => Effect.void)
it.effect.only("run only this", () => Effect.void)
it.effect.fails("expected to fail", () => Effect.fail("expected"))Logging
日志
Logging is suppressed in . Enable with custom logger or :
it.effectit.livets
import { it } from "@effect/vitest"
import { Effect, Logger } from "effect"
it.effect("with logging", () =>
Effect.log("visible").pipe(Effect.provide(Logger.pretty))
)
it.live("logging enabled by default", () =>
Effect.log("visible")
)在中日志会被屏蔽。可通过自定义日志器或启用:
it.effectit.livets
import { it } from "@effect/vitest"
import { Effect, Logger } from "effect"
it.effect("with logging", () =>
Effect.log("visible").pipe(Effect.provide(Logger.pretty))
)
it.live("logging enabled by default", () =>
Effect.log("visible")
)