diff --git a/nvm-exec b/nvm-exec index 696a4ab1..fff4f153 100755 --- a/nvm-exec +++ b/nvm-exec @@ -12,7 +12,9 @@ if [ -n "$NODE_VERSION" ]; then else { NVM_RC_VERSION="$(nvm_rc_version 3>&1 1>&4)"; } 4>&1 && nvm_ensure_version_installed "$NVM_RC_VERSION"; if ! nvm use >/dev/null 2>&1; then - echo "No NODE_VERSION provided; no .nvmrc file found" >&2 + nvm_err 'nvm-exec: unable to select a node version' + # shellcheck disable=SC2016 + nvm_err ' Set `NODE_VERSION` (e.g. `NODE_VERSION=default`), or add an `.nvmrc` file.' exit 127 fi fi diff --git a/test/fast/Running 'nvm-exec' should display required node version b/test/fast/Running 'nvm-exec' should display required node version index 66ab9a62..28503bb4 100755 --- a/test/fast/Running 'nvm-exec' should display required node version +++ b/test/fast/Running 'nvm-exec' should display required node version @@ -1,14 +1,28 @@ #!/bin/bash set -x +export NVM_DIR="$(cd ../.. && pwd)" + +# an ambient value would send nvm-exec down its `NODE_VERSION` branch +unset NODE_VERSION + : nvm.sh \. ../../nvm.sh -cleanup() { rm -f .nvmrc; } +ORIG_PWD="$(pwd)" + +cleanup() { + cd "${ORIG_PWD}" 2>/dev/null || true + rm -f .nvmrc + [ -n "${TMP_DIR-}" ] && rm -rf "${TMP_DIR}" +} die () { echo "$@" ; cleanup ; exit 1; } NVM_TEST_VERSION=v0.42 +HINT="nvm-exec: unable to select a node version + Set \`NODE_VERSION\` (e.g. \`NODE_VERSION=default\`), or add an \`.nvmrc\` file." + # Write it to nvmrc echo "$NVM_TEST_VERSION" > .nvmrc @@ -17,9 +31,26 @@ EXPECTED="Found '$(pwd)/.nvmrc' with version <${NVM_TEST_VERSION}> N/A: version \"${NVM_TEST_VERSION}\" is not yet installed. You need to run \`nvm install ${NVM_TEST_VERSION}\` to install and use it. -No NODE_VERSION provided; no .nvmrc file found"; +${HINT}"; # Skip install, we want to test the error message [ "${EXPECTED}" = "${OUTPUT}" ] || die "expected >${EXPECTED}<, got >${OUTPUT}<" +rm -f .nvmrc + +NVM_EXEC="$(cd ../.. && pwd)/nvm-exec" + +# Run from a fresh, empty directory so no ambient .nvmrc above the test dir +# can satisfy the lookup and mask the hint. +TMP_DIR="$(mktemp -d)" +cd "${TMP_DIR}" || die "could not cd to temp dir" + +OUTPUT="$("${NVM_EXEC}" node &1)"; +EXIT_CODE=$? +EXPECTED="No version provided and no .nvmrc file found +${HINT}"; + +[ "${EXPECTED}" = "${OUTPUT}" ] || die "expected >${EXPECTED}<, got >${OUTPUT}<" +[ "${EXIT_CODE}" = 127 ] || die "expected exit code 127, got >${EXIT_CODE}<" + cleanup