编写测试

A second person

Open another user's browser in the same test, for chat, sharing and anything one person sees another do.

本页还没有中文版,下面是英文原文。

Some features need two people: a teammate sees a message the moment it's posted, an invite arrives, a shared document updates. users.open(name) opens another person's browser beside the test's own, so one test covers both sides.

Open a second browser

tests/chat.danwo.ts
import { test } from "@danwo/sdk"

test("a teammate sees a post the moment it is made", async ({ app, screen, expect, users }) => {
  const bob = await users.open("bob", { session: "bob" })

  await bob.app.open("/")
  await app.open("/")
  await screen.getByRole("textbox", { name: "Message" }).fill("Lunch at noon")
  await screen.getByRole("button", { name: "Post" }).click()

  await bob.expect(bob.screen.getByText("Lunch at noon")).toBeVisible()
})

bob has the same fixtures a test does, each scoped to that browser:

On bobWorks like
app, screenthe test's own, in Bob's browser
expect, agentchecks and agent steps on his pages
mail, secrethis mail and the run's secrets

Pass { session } to start Bob from a saved session. Leave it out to start signed out.

What both browsers share

SharedSeparate
the proxy and every emulatorcookies, storage and tabs
the clock: time.travel moves boththeir video and steps in the record
your app and its databasethe session each one starts from

A name is up to 40 letters, digits, dots, underscores or dashes, and each name opens once per test. Call bob.close() to close that browser early. Every browser closes when the test ends.

In the record

The flight record tags each step, call, socket and console line with its person. Each person gets their own video, so the player shows bob · tab 1 beside you · tab 1. Go to on Bob's step switches to that video.

In the matrix

A socket Bob's browser opened is faulted for Bob alone. Run only those trials with a filter:

npx @danwo/cli matrix tests/chat.danwo.ts --faults "for bob"

The trial reads like connection dropped on WS <host>/<path> for bob.

users.open isn't supported on Android yet. It fails with CONFIG_INVALID.

Next

本页内容

在每个 Pull Request 上运行

每个 Pull Request 一个 GitHub Check 和一条评论,并附上完整的运行记录。

配置 CI