73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
load("@npm//@bazel/esbuild:index.bzl", "esbuild")
|
|
load("@npm//jest-cli:index.bzl", _jest_test = "jest_test")
|
|
|
|
def jest_test(deps, name = "jest", protobuf = False, env = "node", debug = False):
|
|
ts_sources = native.glob(["**/*.test.ts"])
|
|
|
|
# bundle each test file up with its dependencies for jest
|
|
bundled_srcs = []
|
|
esbuild_extra_args = {}
|
|
esbuild_extra_srcs = []
|
|
if protobuf:
|
|
esbuild_extra_args["inject"] = ["ts/protobuf-no-long.js"]
|
|
esbuild_extra_srcs.append(
|
|
"//ts:protobuf-no-long.js",
|
|
)
|
|
|
|
for ts_src in ts_sources:
|
|
base = ts_src.replace(".test.ts", "")
|
|
bundle_name = base + ".bundle.test"
|
|
bundled_srcs.append(bundle_name)
|
|
esbuild(
|
|
name = bundle_name,
|
|
args = dict(
|
|
esbuild_extra_args,
|
|
platform = "node",
|
|
keepNames = True,
|
|
),
|
|
entry_point = ts_src,
|
|
output = bundle_name + ".js",
|
|
srcs = esbuild_extra_srcs,
|
|
deps = deps,
|
|
# the code shaking saves close to a second off the deckoptions/lib.test.ts test
|
|
minify = not debug,
|
|
target_compatible_with = select({
|
|
"@platforms//os:osx": [],
|
|
"@platforms//os:linux": [],
|
|
"//conditions:default": ["@platforms//os:linux"],
|
|
}),
|
|
)
|
|
|
|
# then test them
|
|
optional_jsdom_deps = [
|
|
"@npm//jest-environment-jsdom",
|
|
] if env == "jsdom" else []
|
|
|
|
# After starting Jest, open the url "chrome://inspect" in
|
|
# a Chrome browser and inspect as remote target.
|
|
debug_args = [
|
|
"--run-in-band",
|
|
"--node_options=--inspect-brk",
|
|
] if debug else []
|
|
|
|
_jest_test(
|
|
name = name,
|
|
args = [
|
|
"--no-cache",
|
|
"--no-watchman",
|
|
"--ci",
|
|
"--colors",
|
|
"--config",
|
|
"$(location //ts:jest.config.js)",
|
|
"--env=" + env,
|
|
] + debug_args,
|
|
data = deps + bundled_srcs + [
|
|
"//ts:jest.config.js",
|
|
] + optional_jsdom_deps,
|
|
target_compatible_with = select({
|
|
"@platforms//os:osx": [],
|
|
"@platforms//os:linux": [],
|
|
"//conditions:default": ["@platforms//os:linux"],
|
|
}),
|
|
)
|