I'm looking for ways to test my scripts and some patterns you use/recommend. For instance, how would you test a script such as this one:
#!/usr/bin/env bash
build="$1"
# check that build number is passed
[[ -z $build ]] && { echo "missing argument: build"; exit 1; }
cd ./visual || exit 1
curl "https://" | grep -o 'https://[^"]*' > artifacts.txt
awk -v TOKEN="$TOKEN" '/current/ {print $0 "?token=" TOKEN;}' artifacts.txt \
| xargs -P4 -l1 wget \
--content-disposition \
--force-directories \
--no-host-directories \
--cut-dirs=5
# let's remove our token from the filename
shopt -s globstar
for file in **/*; do
mv $file ${file/\?*/}
done
rm artifacts.txt
How do I check I have been cd
to the correct directory?
Currently I stub cd
to check how it's call.
cd() { echo "cd $*"; exit; } # mock
export -f cd
run my-script.bash "1234"
[[ "${lines[0]}" == "cd ./visual" ]]
But then the script continue to run everything after that.
How to test a pipe?
curl "https://" | grep -o 'https://[^"]*' > artifacts.txt
or
awk -v TOKEN="$TOKEN" '/current/ {print $0 "?token=" TOKEN;}' artifacts.txt \
| xargs -P4 -l1 wget \
--content-disposition \
--force-directories \
--no-host-directories \
--cut-dirs=5
What would you test and how? Is it possible to test part of the pipe?
How would you check value of an env var
awk -v TOKEN="$TOKEN" '/current/ {print $0 "?token=" TOKEN;}' artifacts.txt \
How would you chek that we use globstar?
shopt -s globstar
for file in **/*; do
mv $file ${file/\?*/}
done
related: github issue