互联网身份剧作家
A 类 剧作家 库,以简化集成 互联网身份 e2E测试中的认证.
导 言
这个寄存器提供了Playwright固定装置,旨在协助开发者利用互联网身份为dApps创建端到端(E2E)测试. 这些预先构建的情景使得开发者能够无缝地整合认证流,包括身份的创建和再利用,而不需要自己执行这些流.
* 安装
# with npm
npm install --save-dev @dfinity/internet-identity-playwright
# with pnpm
pnpm add --save-dev @dfinity/internet-identity-playwright
# with yarn
yarn add -D @dfinity/internet-identity-playwright
使用量
要使用互联网身份游戏机固定装置,请遵循这些步骤:
1. 进口固定设备
在您的 Playwright 测试文件中, 导入此库提供的设置 .
import {testWithII} from '@dfinity/internet-identity-playwright';
2. 撰写测试
使用测试中的扩展定着来进行认证流 .
[注] 这个
signIn()方法可以自动检测这是第一次的密码流还是现有的密码流,为您处理复杂问题. 也值得注意的是,它总是试图再利用在Playwright会话中创建的同一种默认身份,以确保所提供的身份可以复制.
testWithII('should sign-in with a user', async ({page, iiPage}) => {
await page.goto('/');
await iiPage.signIn();
});
这个 iiPage 对象代表您应用程序中的页面,该页面包含以互联网身份启动认证流程的行动呼吁.
默认情况下, 固定符会搜索属性识别的按钮 [data-tid=login-button]。您可以通过提供自己的选择器来自定义此行为.
const loginSelector = '#login';
testWithII('should sign-in with a user', async ({page, iiPage}) => {
await page.goto('/');
await iiPage.signIn({passkey: {selector: loginSelector}});
});
当首次创建出新的密码时,身份名默认被设定为"Test". 您可以使用参数自定义此行为或创建其他账户 account。 。 。 .
[注] 创建账户需要在Playwright会话中首次签名.
const loginSelector = '#login';
testWithII('should sign-in with a user', async ({page, iiPage}) => {
await page.goto('/');
await iiPage.signIn();
await page.locator('#logout').click();
await iiPage.signIn({passkey: {account: 'Hello World'}});
});
3. 等待互联网身份(可选)
你可能会遇到一些情景,即你对本地复制品进行测试时,与你的测试同时开始,通常在将测试自动化时进行。 图书馆还揭露了一个固定的,让你等待互联网身份的准备.
例如,您可以提供本地复制的 URL 和 Internet Ident 的 ID :
testWithII.beforeEach(async ({iiPage, browser}) => {
const url = 'http://127.0.0.1:4943';
const canisterId = 'rdmx6-jaaaa-aaaaa-aaadq-cai';
await iiPage.waitReady({url, canisterId});
});
该函数还接受一个可选的超时参数来指定该函数需要等多久才能被挂载,默认值为60000毫秒.
testWithII.beforeEach(async ({iiPage, browser}) => {
const url = 'http://127.0.0.1:4943';
const canisterId = 'rdmx6-jaaaa-aaaaa-aaadq-cai';
const timeout = 30000;
await iiPage.waitReady({url, canisterId, timeout});
});
4. 运行测试
照常运行您的 Playwright 测试 .
npx playwright test
💁♂️️ 提示技巧( T)
示例测试
您可以在以下文件中找到示例测试 : 登录. spec.ts。 。 。 .
本地运行测试
为了在当地进行这些测试,采取以下步骤:
- 安装容器运行时间 :
确保您在机器上安装了最新的容器运行时间, 例如 夹克 或者说 鲍德曼。 。 。 .
该套房默认使用多克. 如果使用Podman,请更新模拟器配置 演示/juno.config.mjs数字 :
emulator: {
runner: {
type: "podman"
},
satellite: {}
}
- 安装朱诺的 CLI :
npm i -g @junobuild/cli
- 启动模拟器 :
导航到 演示 目录并启动环境 :
cd demo
juno emulator start
- 设置环境 :
如果这是您首次在本地运行测试, 您需要配置演示应用程序的后端, 通过授权您的 CLI 操作演示的卫星( canister) 并应用其后端配置 :
juno login --emulator --mode development
juno config apply --mode development
- 运行测试 :
返回根目录并执行测试 :
npm run e2e
本地运行 Captcha 测试
默认测试套件可以验证使用互联网身份而无需Captcha要求. 要测试有 Captcha 的流量, 请在 demo 目录 :
docker compose -f docker-compose.captcha.yml up
然后,导航到根目录并运行专用测试:
npm run e2e:captcha
本地运行所需的密码测试
默认测试套件验证了最新的"互联网身份"的使用,该套件并不要求用户完成特定步骤来创建密码. 要测试需要密码创建的流程, 请运行以下命令: demo 目录 :
docker compose -f docker-compose.passkey.yml up
然后,导航到根目录并运行专用测试:
npm run e2e:passkey
* 限制
目前,在Playwright有能力的情况下,无法执行库的固定装置 装入已认证状态。 Playwright 目前不支持索引DB中的此类功能。 这一限制在《公约》中加以跟踪 GitHub 第11164期 (中文(简体) )。 。 。 .
虽然技术上可以使用本地存储而不是索引DB,但这种方法一般不被劝阻,因为它没有反映身份如何被存储在浏览器中. 我们倾向于遵守测试的最佳做法,以确保最准确地模拟现实世界的情况.