Yar
Yar

Reputation: 7476

Bazel sh_test doesn't find node

I am trying to run a script which needs node. I have node installed in my machine. I can run sh_binary by bazel run //:sh_bin and the script runs node just fine:

sh_binary(
    name = "sh_bin",
    data = [
    ],
    srcs = [":script.sh"],
)

script.sh:

node -v

bazel run //:sh_bin:

v14.17.6

Now I want to convert this to sh_test:

sh_test(
    name = "sh_bin",
    data = [
    ],
    srcs = [":script.sh"],
)

but now bazel test //:sh_bin cannot find node:

node: command not found

I also tried to add local = True to the test and still the same issue.

Upvotes: 1

Views: 536

Answers (1)

Laurenz
Laurenz

Reputation: 1960

Bazel tests are run in a more controlled environment than application run via bazel run. One of the initial conditions that the test runner establishes is the value of $PATH: https://docs.bazel.build/versions/main/test-encyclopedia.html#initial-conditions

If you are working with remote execution, another problem could be that your test is executed on a machine that does not have node installed.

It's always a great idea to strive for a hermetic build that runs and tests independent of the host's state. That means you'd need to make the node program available to your binary or test as a data dep.

A good alternative is to build on existing work such as https://github.com/bazelbuild/rules_nodejs.

That being said, your example actually works for me.

cd `mktemp -d`
touch WORKSPACE
echo "node -v" > script.sh
chmod +x script.sh
cat <<EOF > BUILD
sh_test(
    name = "sh_bin",
    srcs = [":script.sh"],
)
EOF
bazel test --test_output=all -- //:sh_bin
Starting local Bazel server and connecting to it...
INFO: Analyzed target //:sh_bin (24 packages loaded, 282 targets configured).
INFO: Found 1 test target...
INFO: From Testing //:sh_bin:
==================== Test output for //:sh_bin:
v17.1.0
================================================================================
Target //:sh_bin up-to-date:
  bazel-bin/sh_bin
INFO: Elapsed time: 6.895s, Critical Path: 0.10s
INFO: 5 processes: 3 internal, 2 linux-sandbox.
INFO: Build completed successfully, 5 total actions
//:sh_bin                                                                PASSED in 0.0s

Executed 1 out of 1 test: 1 test passes.
INFO: Build completed successfully, 5 total actions

Upvotes: 1

Related Questions