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
链接 工作空间 root
(单位:千美元)布尔: 将工作空间根链接到 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 页面存档备份,存于互联网档案馆。 。 。 .
- 受预定义源/输出路径变量替代的约束.
预定义变量 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)。这在未来可能会改变.
- 受预定义变量和自定义变量替换的约束.
扩大 $( 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 二进制
默认为 ""