概述

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 配置

jest.config.js
{
  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 对钩子有不同的命名约定,因此您应该确认您的测试遵循本指南。*

步骤 4:查看 Jest 测试运行器的结果