使用 Jest 作为测试运行器
概述
Jest 是一个 JavaScript 测试框架,用于轻松编写单元测试,而 Nightwatch.js 是一个集成测试框架,用于在所有主要浏览器上对 Web 应用程序和网站执行自动化的端到端测试。
因此,为了同时使用 Jest 和 Nightwatch 的功能,Nightwatch 引入了一个新的依赖项 jest-environment-nightwatch
。
API
global.browser
Nightwatch 浏览器 API 对象。当 autoStartSession 关闭时不可用。
global.jestNightwatch
Jest 环境使用 Nightwatch 编程 API 创建 Nightwatch 实例并导出浏览器 API。
可用属性/方法
.element(<locator>)
- 使用 Nightwatch .element() API 在页面中查找元素;.updateCapabilities({ capabilities })
- 当 autoStartSession 关闭时使用,以便在运行时更新功能;.launchBrowser()
- 当 autoStartSession 关闭时使用,以便启动会话并打开浏览器;.settings
- Nightwatch 设置对象;.nightwatch_client
- Nightwatch(内部)实例。
配置和示例
步骤 0:安装 Nightwatch
按照 指南 或观看 视频 从头开始安装 Nightwatch。
步骤 1:安装 Jest
npm i jest --save-dev
并确保在 package.json 文件中包含以下脚本,以便运行 Jest 测试。
{
"scripts": {
"test": "jest"
}
}
步骤 2:安装和配置 jest-environment-nightwatch 包
为了将 Nightwatch 与 Jest 配合使用,您需要安装 jest-environment-nightwatch
。安装 Jest 和测试所需的其它依赖项。
npm i jest-environment-nightwatch --save-dev
Nightwatch Jest 环境带有默认设置。但是,如果需要,可以调整 Jest 配置
{
testEnvironment: 'jest-environment-nightwatch',
testEnvironmentOptions: {
// Nightwatch related options
headless: true,
browserName: 'chrome',
baseUrl: '',
verbose: false,
output: true,
env: null,
parallel: false,
devtools: false,
debug: false,
autoStartSession: true,
persistGlobals: true,
configFile: './nightwatch.conf.js',
globals: {},
webdriver: {},
timeout: null,
enableGlobalApis: false,
alwaysAsync: true,
desiredCapabilities: {},
async setup(browser) {},
async teardown(browser) {},
},
testMatch: [
"**/tests/*.[jt]s?(x)"
],
}
您可以在 testMatch
中设置测试文件夹目录。
Nightwatch 选项
通过提供以下任何配置选项可以修改 Nightwatch 的默认行为。以下是可用选项及其默认值的列表。
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
headless |
布尔值 | 在无头模式下运行 Nightwatch(在 Firefox、Chrome、Edge 中可用) | true |
browserName |
字符串 | 要使用的浏览器名称;可用选项为:chrome、firefox、edge、safari | none |
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 文档中的测试环境。 | none |
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 测试全局变量。 | none |
webdriver |
对象 | 用于配置 Nightwatch Webdriver 服务的 Webdriver 相关设置列表。详细了解 Nightwatch 文档中的 Nightwatch webdriver 设置。Nightwatch 文档中的 Nightwatch webdriver 设置。 | none |
timeout |
数字 | 设置断言重试的全局超时,在断言失败之前。 | 5000 |
enableGlobalApis |
布尔值 | 默认情况下,Nightwatch 全局 API(element()、expect())被禁用。 | false |
desiredCapabilities |
对象 | 为当前会话定义自定义 Selenium 功能。详细了解正在使用的特定浏览器驱动程序,请参阅 Nightwatch 文档。 | none |
setup() |
函数 | 在 Nightwatch 启动后要执行的额外设置钩子。 | none |
teardown() |
函数 | 使用 Nightwatch api 对象要执行的额外拆卸钩子。 | none |
步骤 3:运行示例测试
考虑以下示例测试
describe('duckduckgo example', function() {
it('Search Nightwatch.js and check results', function(browser) {
browser
.navigateTo('https://duckduckgo.com')
.waitForElementVisible('#search_form_input_homepage')
.sendKeys('#search_form_input_homepage', ['Nightwatch.js'])
.click('#search_button_homepage')
.assert.visible('.results--main')
.assert.textContains('.results--main', 'Nightwatch.js');
});
});
注意:Jest 对钩子有不同的命名约定,因此您应该确认您的测试遵循本指南。*