anki/ts/jest.bzl

66 lines
2.0 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"):
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 = True,
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 []
_jest_test(
name = name,
args = [
"--no-cache",
"--no-watchman",
"--ci",
"--colors",
"--config",
"$(location //ts:jest.config.js)",
"--env=" + env,
],
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"],
}),
)