概述

Ava 是一个用于 Node.js 的测试运行器,它具有简洁的 API,拥抱新的语言特性,具有详细的错误输出和进程隔离。虽然 Ava 主要用于运行单元测试,但它可以与 Nightwatch.js 配合使用,作为跨所有主要浏览器对 Web 应用程序执行自动化的端到端测试的集成测试框架。

带有示例的配置

步骤 0:安装 Nightwatch

按照 指南 或观看 视频 从头开始安装 Nightwatch。

步骤 1:安装 Ava

npm i ava --save-dev

并确保您已在 package.json 文件中包含以下脚本以运行 ava 测试。

{
 "scripts": {
   "test": "ava"
 }
}

步骤 2:配置 Ava

您可以在 package.json 文件中配置所有 CLI 选项,也可以创建一个名为 ava.config.js 的文件。有关更多详细信息,请按照 指南 进行操作

{
    "ava": {
        "files": [
            "test/**/*",
            "!test/exclude-files-in-this-directory",
            "!**/exclude-files-with-this-name.*"
        ],
        "match": [
        //	"*oo",
        //	"!foo"
        ],
        "concurrency": 5,
        "failFast": true,
        "failWithoutAssertions": false,
        "environmentVariables": {
            "MY_ENVIRONMENT_VARIABLE": "some value"
        },
        "verbose": true,
        "nodeArguments": [
            "--trace-deprecation",
            "--napi-modules"
        ]
    }
}

步骤 3:为 Ava 设置 Nightwatch 环境

您必须创建一个 Nightwatch 环境,使其与 Ava 兼容。您需要编写一个名为 _setup-nightwatch-env.js 的文件,并确保它已包含在您的测试文件中

const Nightwatch = require('nightwatch');

const createNightwatchClient = function({
  headless = true,
  browserName = undefined,
  silent = true,
  verbose = false,
  output = true,
  env = null,
  parallel = false,
  devtools = false,
  debug = false,
  persistGlobals = true,
  configFile = './nightwatch.conf.js',
  globals = {},
  webdriver = {},
  timeout = null,
  enableGlobalApis = false,
  reporter = null,
  alwaysAsync = true,
  desiredCapabilities = {}
} = {}) {

  const client = Nightwatch.createClient({
    headless,
    browserName,
    reporter,
    env,
    timeout,
    parallel,
    output,
    devtools,
    debug,
    enable_global_apis: enableGlobalApis,
    silent: silent && !verbose,
    always_async_commands: alwaysAsync,
    webdriver,
    persist_globals: persistGlobals,
    config: configFile,
    globals,
    desiredCapabilities
  });

  client.updateCapabilities(desiredCapabilities);

  return client.launchBrowser();
};

module.exports = async (t, run) => {
 global.browser = await createNightwatchClient();
 try {
   await run(t);
 } finally {
   await global.browser.end();
 }
};

Nightwatch 选项

可以通过提供以下任何配置选项来修改 Nightwatch 的默认行为。以下是可用选项及其默认值的列表。

名称 类型 描述 默认
headless 布尔值 以无头模式运行 Nightwatch(在 Firefox、Chrome、Edge 中可用) true
browserName 字符串 要使用的浏览器名称;可用选项为:chrome、firefox、edge、safari
baseUrl 字符串 使用 .navigateTo() 与相对 URL 时使用的基本 URL。在进行组件测试时,需要将其设置为运行 Vite 开发服务器的 URL。 https://127.0.0.1:3000
verbose 布尔值 启用完整的 Nightwatch http 日志。 false
output 布尔值 显示 Nightwatch 输出 true
env 字符串 要使用的 Nightwatch 测试环境,来自 nightwatch.conf.js。详细了解 Nightwatch 文档中的测试环境。
parallel 布尔值 在并行运行测试时将其设置为 true false
devtools 布尔值 仅 Chrome:自动打开 Chrome 开发工具 false
debug 布尔值 仅组件测试:在渲染组件后暂停测试执行 false
autoStartSession 布尔值 自动启动 Nightwatch 会话。如果禁用此功能,您需要在测试中调用 jestNightwatch.launchBrowser()。 true
persistGlobals 布尔值 在运行之间保留相同的全局对象,或者为每个测试创建其(深度)副本。详细了解 Nightwatch 文档中的测试全局变量。 true
configFile 字符串 要使用的 Nightwatch 配置文件。默认情况下会自动生成配置文件,但您可以更改它。详细了解 Nightwatch 文档中的 Nightwatch 配置。 ./nightwatch.conf.js
globals 对象 要在 Nightwatch 中使用的全局变量列表。全局变量在 browser.globals 上可用。详细了解 Nightwatch 文档中的 Nightwatch 测试全局变量。
webdriver 对象 配置 Nightwatch Webdriver 服务的 Webdriver 相关设置列表。详细了解 Nightwatch 文档中的 Nightwatch webdriver 设置。Nightwatch 文档中的 Nightwatch webdriver 设置。
timeout 数字 设置断言重试的全局超时,在断言失败之前。 5000
enableGlobalApis 布尔值 默认情况下,Nightwatch 全局 API(element()、expect())被禁用。 false
desiredCapabilities 对象 为当前会话定义自定义 Selenium 功能。详细了解 Nightwatch 文档中使用的特定浏览器驱动程序。
setup() 函数 在 Nightwatch 启动后执行的附加设置钩子。
teardown() 函数 使用 Nightwatch api 对象执行的附加拆卸钩子。

步骤 4:运行示例测试

考虑以下示例测试

const test = require('ava');
const await_nightwatch_browser = require('../../../_setup-nightwatch-env.js');

test('duckduckgo example', await_nightwatch_browser, async function(t) {
 browser
   .navigateTo('https://www.ecosia.org/')
   .waitForElementVisible('body')

 const titleContains = await browser.assert.titleContains('Ecosia');
 t.is(titleContains.passed, true);

 const visible =  await browser.assert.visible('input[type=search]')
 t.is(visible.passed, true);

 t.pass();
});

要运行测试,您可以使用以下命令

npm test

或者

npx ava

注意:Ava 有不同的命名约定,因此您应确认您的测试遵循此 指南

步骤 5:查看 Ava 测试运行器的结果

相关文章