跳转到主文档

Electron Test

为 Electron 应用编写自动测试, 你需要一种 “驱动” 应用程序的方法。Spectron 是一种常用的解决方案, 它允许您通过 WebDriver 模拟用户行为。

当然,也可以使用 Node 的内建 IPC STDIO 来编写自己的自定义驱动。 自定义驱动的优势在于,它往往比 Spectron 需要更少的开销,并允许你向测试套件公开自定义方法。

Class: TestDriver

补充信息
import TestDriver from '@modern-js/electron-test';

new TestDriver(options)

参数

  • options:object,测试驱动配置。
    • cwd:string,测试执行目录。
    • [envs]object,执行的环境变量。

返回值

  • 返回 TestDriver 实例。

创建一个 TestDriver 实例,这会启动一个Electron 应用实例。

警告

当我们需要启动多个实例的时候,我们需要在环境变量中添加:TEST_FOLDER 变量,用于区分实例运行目录。 比如:

new TestDriver({
cwd: 'xxx/electron',
envs: {
TEST_FOLDER: 'test1'
}
})

实例方法

testDriver.isRunning()

返回值

  • boolean,是否处于运行中。

返回当前实例是否仍然处于运行中。

testDriver.checkReady(options)

参数

  • options:object 检查是否处于已就绪状态。
    • [winName]string,窗口名。
    • [webviewId]string,webview 的 ID。

返回值

  • Promise<boolean>,是否已经就绪。

如果没有传窗口名,则此方法表示检测主进程是否启动完毕; 如果传递窗口名,则表示检测窗口是否加载完毕; 如果传递了窗口名,且传递了 webview 的 ID,则表示检查,某个窗口下,某个 webview 是否已加载完毕。

testDriver.whenReady([winName,options])

参数

  • [winName]string,窗口名。
  • [options]object
    • [timeout]number,等待超时时间,默认值 10000。
    • [webviewId]string,webview 的 ID。

返回值

  • Promise<boolean>,是否已经就绪。
提示
  • 当没有传递 winName时,表示当主进程加载完毕时;
  • 当传递了窗口,没有传递其他选项时,表示当窗口winName加载完毕时;
  • 当传递了窗口名,且传递了webviewId,表示当窗口winName的 ID 为 webviewIdwebview加载完毕时。 其中,timeout 为等待webview加载完毕的时间,超时则抛出异常。

testDriver.stop()

返回值

  • void

停止实例。

testDriver.call(options)

参数

  • options:object,访问参数。
    • [funcName]string,需要测试的函数名。
    • [winName]string,需要测试的窗口名。
    • [args]any[],测试函数时传递的参数。

返回值

  • Promise<any>,访问结果。
提示
  • 当传递了funcName,未传递winName时,则表示测试主进程注册的服务函数funcName
  • 当传递了funcNamewinName,则表示测试窗口winName中的服务函数funcNameargs 为执行函数的参数。
  • 更多测试,请看【测试示例】