工具链
测试
像用户一样测试应用,可以无窗口运行,也可以在原生窗口中运行。
一个测试
nsgotest 无需窗口即可启动应用。测试按文本或角色找到控件,并像用户一样操作它们:
func TestMain(m *testing.M) { nsgotest.Main(m) }
func TestPress(t *testing.T) {
app := nsgotest.Start(t, Root)
app.Press("text:Press me")
app.Find("text:Pressed 1 times")
}
当测试在某个目标上运行时,TestMain 会把主线程交给平台。
运行测试
go tool nsgo test
test 每个测试输出一行。-run 像 go test 一样筛选测试,-junit report.xml 写出 JUnit 报告,-trace 打印每一步的挂载项和提交耗时,-bench 改为运行基准测试,每个结果输出一行。-- 之后的参数交给 go test。
传入没有 nsgo.yaml 的目录(例如库或模块根目录)时,test 会处理其下的所有包;目录也可以像 Go 的包模式那样以 /... 结尾。go tool nsgo check 以同样的方式选取并检查包。
在平台上运行
同一组测试可以在真实窗口中、用平台自己的输入运行:
go tool nsgo test -target macos
可用的目标有 macos、windows、linux、web(在 Chrome、Chromium 或 Edge 中)、ios_simulator、tvos_simulator(方向键、作为选择键的 Return 和作为 Menu 键的 Escape 模拟遥控器)、watchos_simulator 和 android,或 all。每个测试在独立的进程中运行,app.Screenshot("name") 会把截图保存到 .nsgo/test/screenshots,-fps 会在 macos、windows、linux 和 ios_simulator 上每秒记录一次性能监视器的读数。-env KEY=VALUE 为测试设置环境变量,手机上的测试只能这样拿到变量。
要测量而不是检查时,用 nsgotest.Measure() 启动:应用运行在系统时钟上,Advance 会真实等待相应时长,各步骤只等待正在进行的动画停下。app.Mark("name") 标出此后的读数测的是什么,app.Mark("-") 结束标记;无论是否加 -fps,标记都会打印出来。
TSX 测试
TSX 应用中用 nsgo/test 编写的 *.test.tsx 文件会随 Go 测试一起运行。
不写测试文件也能驱动 TSX 应用:传入它的入口,并从标准输入提供步骤,写法与 *.test.tsx 测试的函数体相同,app 即该应用:
go tool nsgo test App.tsx < steps.ts