使用 Ava 作为测试运行器
概述
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 测试运行器的结果
相关文章