@bazel/cypress

中文文档
5.8.1发布于 2023/02/17Apache-2.0零依赖近 30 天下载 1.4万

在 Bazel 下运行 Cypress e2e 测试框架

中文使用文档
文档目录5 节
  1. 安装
  2. Cypress web 测试的示例
  3. cypress tool链
  4. cypress web 测试
  5. cypress 仓库

Bazel 的 Cypress规则

Cypress规则在Cypress e2e测试框架下与Bazel运行测试.

安装

添加 @bazel/cypress 财务报告和审定财务报表 cypress npm 包给您的 devDependencies 内 package.json。 。 。 .

npm install --save-dev @bazel/cypress cypress

或使用线条

yarn add -D @bazel/cypress cypress

然后,加载和引用 cypress_repositories 在您内部 WORKSPACE 文档.

load("@build_bazel_rules_nodejs//toolchains/cypress:cypress_repositories.bzl", "cypress_repositories")

# The name you pass here names the external repository you can load cypress_web_test from
cypress_repositories(name = "cypress", version = "MATCH_VERSION_IN_PACKAGE_JSON")

Cypress web 测试的示例

这个例子假设您为节点的外部寄存器命名为 npm 和被电击为 cypress

load("@npm//@bazel/concatjs:index.bzl", "ts_library")
load("@npm//@bazel/cypress:index.bzl", "cypress_web_test")

# You must create a cypress plugin in order to boot a server to serve your application. It can be written as a javascript file or in typescript using ts_library or ts_project.
ts_library(
    name = "plugin_file",
    testonly = True,
    srcs = ["plugin.ts"],
    tsconfig = ":tsconfig.json",
    deps = [
        "@npm//@types/node",
        "@npm//express",
    ],
)

# You can write your cypress tests a javascript files or in typescript using ts_library or ts_project.
ts_library(
    name = "hello_spec",
    testonly = True,
    srcs = ["hello.spec.ts"],
    tsconfig = ":tsconfig.json",
    deps = [
        "@npm//cypress",
    ],
)

cypress_web_test(
    # The name of your test target
    name = "test",
    srcs = [
        # Load javascript test files directly as sources
        "world.spec.js",
        # Load ts_library tests as a target to srcs
        ":hello_spec",
    ],
    # A cypress config file is required
    config_file = "cypress.json",
    # Any runtime dependencies you need to boot your server or run your tests
    data = [],
    # Your cypress plugin used to configure cypress and boot your server
    plugin_file = ":plugin_file",
)

cypress tool链

用户

cypress_toolchain(name, cypress_bin, cypress_bin_path, cypress_files)

定义cypress工具链.

使用量见 https://docs.bazel.building/versions/main/toolchains.html#定义-工具链。 。 。 .

捐款

名称

(单位:千美元)名称,强制:这个目标的独有名称.

cypress bin (韩语)

(单位:千美元)标签:一个为目标平台所下载的可执行cypress可执行二进制.

默认为 None

cypress bin 路径

(单位:千美元)字符串:用于目标平台的现有cypress可执行文件的路径.

默认为 ""

cypress 文件

(单位:千美元)标签:为目标平台下载了所有cypress 二进制文件的hermetic上下集. 设定cypress bin时必须设置 .

默认为 None

cypress web 测试

用户

cypress_web_test(name, chdir, config_file, configuration_env_vars, cypress_npm_package, data,
                 default_env_vars, entry_point, env, expected_exit_code, link_workspace_root,
                 plugin_file, srcs, templated_args, toolchain)

页:1 nodejs_binary,但此选项可用于 bazel test 还有. 当二进制返回零退出代码时,测试通过;否则失败.

nodejs_test 是一种以运行为基础写作新型测试的方便方式 你自己的测试跑者。 例如 ts-api-guardian 库有一个方法 维护 TypeScript 程序的公开 API,并使用 nodejs_test 这里: https://github.com/angular/angular/blob/master/tools/ts-api-guardian/index.bzl 互联网档案馆的存檔,存档日期2014-12-22

如果您只想使用 npm 的测试跑取器进行标准测试, 请使用生成的 npm install/yarn install创建的测试目标,例如 mocha_test。 。 。 . 一些测试跑者如卡玛和茉莉有带有附加特征的自定义规则,例如. jasmine_node_test。 。 。 .

默认情况下, Bazel 在工作空间根上运行带有工作目录的测试 . 使用 chdir 属性以在程序开始前更改工作目录.

为了调试一个节点.js测试,我们建议在"配置"中一起保存一组旗帜. 把这个放进你的 tools/bazel.rc 所以它与你的团队分享:

# Enable debugging tests with --config=debug
test:debug --test_arg=--node_options=--inspect-brk --test_output=streamed --test_strategy=exclusive --test_timeout=9999 --nocache_test_results

现在你可以添加 --config=debug 对任意 bazel test 命令行. 运行时间会在执行程序前暂停,允许您连接一个 远程调试器 .

您也可以更改发送到节点的默认参数 。 这可以通过一面旗帜来实现. 默认是 -- preserve- symlinks 时的任意 可以通过。 旗帜为-@rules nodejs//nodejs:default args=" 如:bazel test-@rules nodejs///nodejs:default args="- preserve-symlinks-no-warnings"///:goal. 这将通过 -- preserve- symlinks 和 -- no-warnings 旗帜到节点。 可用节点旗可在此找到 : https://nodejs.org/api/cli.html (中文(简体) )。 。 。 .

捐款

名称

(单位:千美元)名称,强制:这个目标的独有名称.

颜色

(单位:千美元)字符串: 相对于工作空间运行二进制或测试的工作目录. 默认情况下,Bazel总是在工作空间根中运行. 由于实施的细节,这个论点必须放在这个软件包目录下.

要在包含 nodejs_binary 编号 : nodejs_test,使用时

chdir = package_name()

(或者如果你在一个宏,使用) native.package_name()(中文(简体) )

警告: 这将影响其他路径, 无论是作为参数还是配置文件, 是工作空间相对的. 你也许需要 ../../ 区块,使这些路径与新的工作目录重新相对应.

默认为 ""

配置文件( f)

(单位:千美元)标签,强制:cypress.json配置文件. 见 https://docs.cypress.io/指向/参考/confignation

配置 env vars

(单位:千美元)字符串列表:将这些配置环境变量传递到产生的二进制. 选择配置环境变量的子集(取自 ctx.var))),该词也 包含通过 -- define 旗帜指定的任何内容. 说明,这可能导致本条规则产生的不同产出.

默认为 []

cypress npm 包装

(单位:千美元)标签: Cypress npm软件包. 如果您安装了 cypress 作为对等依赖, 则无需设置 .

默认为 //cypress:cypress

数据

(单位:千美元)标签列表: 执行过程中可能加载的运行时依赖性.

默认为 []

默认( env vars)

(单位:千美元)字符串列表: 添加到其中的默认环境变量 configuration_env_vars。 。 。 .

这是与默认的 configuration_env_vars 这样用户就可以设置 configuration_env_vars 而不损失大多数情况下应当设置的默认值.

默认环境变量集为:

  • VERBOSE_LOGS: 使用一些规则工具打开日志中的调试输出( t)
  • NODE_DEBUG: 被节点.js本身用于打印更多日志
  • RUNFILES_LIB_DEBUG: 打印 Bazel runfile.bash 帮助器的诊断信息

默认为 ["VERBOSE_LOGS", "NODE_DEBUG", "RUNFILES_LIB_DEBUG"]

输入点( c)

(单位:千美元)标签: 输入点 JS文件 哪个拖住 Cli

默认为 @npm//@bazel/cypress/internal:run-cypress.js

环境

(单位:千美元)词典:字符串 - > 字符串: 指定目标执行时要设置的其他环境变量,但须视位置而定 并进行可变扩展.

默认为 {}

需要退出 代码

(单位:千美元)整数:测试的预期出站代码. 默认为 0.

默认为 0

(单位:千美元)布尔: 将工作空间根链接到 bin dir 支持绝对要求, 如“ my wksp/ path/ to/ file ” . 如果需要源文件,则可以复制到bin dir并复制到 bin.

默认为 False

插件 文件

(单位:千美元)标签: 您的cypress插件文件 。 见 https://docs.cypress.io/指向/工具/插件-指向

默认为 @npm//@bazel/cypress/internal:plugins/base.js

弧线

(单位:千美元)标签列表:测试文件列表. 见 https://docs.cypress.io/guides/core-concepts/writing-和-orgizing-tests# Test-files 页面存档备份,存于互联网档案馆

默认为 []

模板( arg)

(单位:千美元)字符串列表: 被传递给程序每次执行的参数. 要通过一个节点启动选项, 请预置它 --node_options=,比如说. --node_options=--preserve-symlinks。 。 。 .

以“ make variable” 为替代 。 见 https://docs.bazel.building/versions/main/be/make-valtables.html 页面存档备份,存于互联网档案馆。 。 。 .

  1. 受预定义源/输出路径变量替代的约束.

预定义变量 execpath, (中文(简体) ), execpaths, (中文(简体) ), rootpath, (中文(简体) ), rootpaths, (中文(简体) ), location,以及 locations 带 标签参数(例如). $(execpath //foo:bar))并替换由该标签所表示的文件路径.

见 https://docs.bazel.building/versions/main/be/make-valtables.html#被预先定义 label vatables (中文(简体) ) 需要更多信息.

NB: 此 $( location) 子stitution 返回显示的文件路径, 路径不同于 {binary & & { test} (原始内容存档于2013-10-12). args and genrule bazel substituties. 这一点将在未来的主要发行中固定下来. 见文件字符串 expand_location_into_runfiles 宏在 internal/common/expand_into_runfiles.bzl 需要更多信息.

建议的办法是现在使用 $(rootpath) 用于您先前使用的$(位置) .

为了从一个 $(rootpath) 到绝对路径 $$(rlocation $(location)) 返回时,您可以使用 $$(rlocation $(rootpath)) 如果你们在 templated_args 页:1 nodejs_binary 或者说 nodejs_test数字 :

BUILD. 贝泽尔:

nodejs_test(
    name = "my_test",
    data = [":bootstrap.js"],
    templated_args = ["--node_options=--require=$$(rlocation $(rootpath :bootstrap.js))"],
)

或者如果您在 .js 脚本的背景中, 您可以将$( rootpath) 传递给脚本作为参数 并使用 javascript runfile 帮助解析绝对路径 :

BUILD. 贝泽尔:

nodejs_test(
    name = "my_test",
    data = [":some_file"],
    entry_point = ":my_test.js",
    templated_args = ["$(rootpath :some_file)"],
)

我的测试.js

const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']);
const args = process.argv.slice(2);
const some_file = runfiles.resolveWorkspaceRelative(args[0]);

NB: Bazel 如果看到单美元符号 $( 位置路径) 在 templated_args 因为它会尝试 扩展 $(rlocation) 因为我们现在扩展预定义的“ make” 变量, 如 $(COMPILATION_MODE), (中文(简体) ), $(BINDIR) 打开 $(TARGET_CPU) 使用 ctx.expand_make_variables。见 https://docs.bazel.building/versions/main/be/make-valtables.html 页面存档备份,存于互联网档案馆。 。 。 .

防止扩大 $(rlocation) 写成 $$(rlocation)巴泽尔明白 $$ 将会是 字符串文字 $ 和扩张的结果 $(rlocation) 转而作为标注通过 正在扩大. $(rlocation) 然后通过bash节点发射台脚本进行评估,并调用 页:1 rlocation 函数在 runfile.bash 帮助中。 例如,模板参数 $$(rlocation $(rootpath //:some_file)) 由 Bazel 扩展为 $(rlocation ./some_file) 哪个 然后在bash中转换为绝对路径 //:some_file 在 runfile.bash 帮助器的运行文件中 之前被传递作为程序的一个论据.

NB: nodejs binary 和 nodejs test 将保留遗留行为 $(rlocation) 这样用户就不会 需要更新到 $$(rlocation)。这在未来可能会改变.

  1. 受预定义变量和自定义变量替换的约束.

扩大 $( COMPIATION MODE) 和 $( TRGET CPU) 等预定义的“ make” 变量. 见 https://docs.bazel.building/versions/main/be/make-valtables.html#预定义-可变量。 。 。 .

自定义变量也得到扩展,包括由-define=SOME VAR=SOME VALUE通过Bazel CLI设置的变量. 见 https://docs.bazel.building/versions/main/be/make-valtables.html#风俗 可变。 。 。 .

在此语境中不支持预先定义的等分变量 .

默认为 []

工具链

(单位:千美元)标签(中文(简体) )

默认为 None

cypress 仓库

用户

cypress_repositories(name, version, linux_urls, linux_sha256, darwin_urls, darwin_sha256,
                     darwin_arm64_urls, darwin_arm64_sha256, windows_urls, windows_sha256)
Repository rule used to install cypress binary.

摄影师

名称

Cypress 二进制居住的外部工作空间名称

版本

要使用的 Cypress 二进制版本 。 应该符合套件. json

linux urls

(可选) URL,其中可以下载linux的 linux 二进制. 如果省略,则, https://cdn.cypress.io/desktop 页面存档备份,存于互联网档案馆 将被使用.

默认为 []

linux sha256 (韩语)

(可选) Linux cypress 二进制的 SHA-256

默认为 ""

汉字

(可选) URL,其中可下载达尔文的cypress 二进制. 如果省略,则, https://cdn.cypress.io/desktop 页面存档备份,存于互联网档案馆 将被使用.

默认为 []

达文-沙256

(可选) Darwin cypress 二进制的 SHA-256

默认为 ""

达尔文 arm64 urls

(可选) URL,其中可下载Darwin arm64的cypress 二进制. 如果省略,则, https://cdn.cypress.io/desktop 页面存档备份,存于互联网档案馆 将会被使用(注:截至此写作(11/2021),Cypress没有本地的arm64建筑,这个URL将链接到x86 64建筑在Rosetta下运行).

默认为 []

达尔文 arm64 sha256

(可选) Darwin arm64 cypress 二进制的 SHA-256

默认为 ""

窗口urls

(可选) URL,其中可以下载linux的窗口distros的cypress 二进制. 如果省略,则, https://cdn.cypress.io/desktop 页面存档备份,存于互联网档案馆 将被使用.

默认为 []

窗口 sha256

(可选) SHA-256 窗口cypress 二进制

默认为 ""

版本与发布记录

@bazel/cypress 共发布 71 个版本,首次发布于 2020/07/07;过去 12 个月发布了 0 个版本。

版本发布日期距今
5.8.1latest2023/02/173 年前
5.7.32022/12/093 年前
5.7.22022/11/273 年前
5.7.12022/10/274 年前
5.7.02022/10/074 年前
5.6.02022/09/274 年前

其他发布通道:next → 5.0.0-rc.2,lts → 4.6.2。

关于 @bazel/cypress 的常见问题

@bazel/cypress 是什么?

在 Bazel 下运行 Cypress e2e 测试框架

如何安装 @bazel/cypress?

在项目目录运行 npm install @bazel/cypress,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:cypress(>=4.7.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@bazel/cypress 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/bazel__cypress 是否存在。

@bazel/cypress 可以商用吗?

@bazel/cypress 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@bazel/cypress 的下载量有多少?

根据 npm 官方下载统计,@bazel/cypress 在 2026/10/08 – 2026/11/06 这 30 天内被下载 14,095 次,日均约 470 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bazel/cypress 还在维护吗?

最新版本 5.8.1 发布于 2023/02/17(3 年前);至今共发布 71 个版本,其中过去 12 个月发布了 0 个;首次发布于 2020/07/07。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。