Tanuld meg, hogyan tesztelheted a Bash-feladataidat az Exercism-ön
A feladatokat az Exercism weboldalán található online szerkesztőben is megoldhatod. Vagy letöltheted a feladatokat a számítógépedre, megoldhatod őket helyben, majd beküldheted az Exercism-re. A dokumentum további része a helyi munkáról szól.
A feladatok letöltéséhez és beküldéséhez szükséged lesz a exercism parancssori eszközre.
Lásd az Exercism CLI dokumentációját.
Az alapértelmezett exercism eszköz egyik bosszantó tulajdonsága, hogy miután letöltöttél egy feladatot, kézzel kell átváltanod a megfelelő könyvtárba.
Ez a burkolófüggvény elintézi ezt helyetted; mentsd el a ~/.bashrc fájlodba.
exercism () {
local out
readarray -t out < <(command exercism "$@")
printf '%s\n' "${out[@]}"
if [[ $1 == "download" && -d "${out[-1]}" ]]; then
cd "${out[-1]}" || return 1
fi
}
Vedd figyelembe, hogy ez nem lehet shell-script, csak shell-függvény. A shell-scriptek egy gyermekfolyamatban futnak, és nem tudják módosítani a jelenlegi shelled környezetét (például az aktuális munkakönyvtárat).
A bash kurzus teszteléséhez a bats eszközt használjuk.
A hipotetikus „whatever” feladat tesztjeit így futtathatod:
cd /path/to/your/exercise_workspace/bash/whatever
bats whatever.bats
Ha a tesztek helyi futtatása közben debugkimenetet szeretnél kiíratni, nézd meg a Helyi hibakeresés oldalt.
bats-core telepítéseValószínűleg telepíthető a kedvenc csomagkezelőddel:
macOS-en a Homebrew eszközzel ez valahogy így néz ki:
$ brew install bats-core
==> Downloading https://github.com/bats-core/bats-core/archive/v1.1.0.tar.gz
==> Downloading from https://codeload.github.com/bats-core/bats-core/tar.gz/v1.1.0
######################################################################## 100.0%
==> ./install.sh /usr/local/Cellar/bats-core/1.1.0
🍺 /usr/local/Cellar/bats-core/1.1.0: 13 files, 55KB, built in 4 seconds
bats csomag is létezik a Homebrew ökoszisztémájában.
Ne telepítsd véletlenül azt: a bats-core csomagot telepítsd.A bats csomag elérhető a Fedora 30 és újabb verzióihoz, így telepítheted:
sudo dnf install bats
Más Linux-disztribúciók esetén előfordulhat, hogy az általunk használt bats nincs kényelmesen csomagolva.
A legjobb, ha forrásból telepíted.
Ha a /usr/local alá szeretnéd telepíteni, akkor:
git clone https://github.com/bats-core/bats-core
cd bats-core/
sudo ./install.sh /usr/local
Ezután, feltéve hogy a /usr/local/bin benne van a $PATH-ben, ezt teheted:
$ bats
Error: Must specify at least one <test>
Usage: bats [-cr] [-f <regex>] [-j <jobs>] [-p | -t] <test>...
bats [-h | -v]
...
$ git clone https://github.com/bats-core/bats-core.git
$ cd bats-core
$ ./install.sh $HOME
Megjegyzés: ha az elavult https://github.com/sstephenson/bats.git címről telepítesz, és ilyen hibát kapsz: cp: cannot create symbolic link '${HOME}/bin/bats': No such file or directory, akkor a bin/bats/libexec/ mappa tartalmát kézzel kell a ${HOME}/bin/ könyvtárba másolnod.
Több jelentés is szól arról, hogy az újabb bats-verziók nem viselkednek jól a MinGW bash alatt; mielőtt lefuttatod a telepítőszkriptet, érdemes lehet ezt megtenned:
$ git checkout v1.1.0
Hogy mit jelentenek a tesztekben a különféle assert* parancsok, arról a bats-assert könyvtár dokumentációjában olvashatsz.
Egy feladat megoldásához minden tesztjének sikeresnek kell lennie. Alapértelmezés szerint a tesztek futtatásakor csak egy teszt (az első) fut le. Ez szándékos, mert így arra összpontosíthatsz, hogy csak azt az egy tesztet tedd sikeressé. Miután sikeres lesz, a következő tesztet úgy engedélyezheted, hogy kikommenteled vagy eltávolítod a
[[ $BATS_RUN_SKIPPED == true ]] || skip
jelöléseket, amelyek a többi teszt elé vannak fűzve.
Ha az összes tesztet, köztük a skip jelöléssel ellátottakat is futtatni szeretnéd, állítsd a BATS_RUN_SKIPPED környezeti változót true értékre.
Az egyik módja, hogy ezt csak a bats futásának idejére állítsd be:
BATS_RUN_SKIPPED=true bats exercise_name.bats
Kényelmes lehet egy burkolófüggvény használata, hogy kevesebbet kelljen gépelned:
bats() {
BATS_RUN_SKIPPED=true command bats *.bats
}
Ezután a teszteket már csak így futtathatod:
bats
bats
A bats-core az eredeti bats implementáció forkjaként jött létre.
A sstephenson/bats projekt meglehetősen hibás volt, és elhagyták.
A tulajdonjog 2017-ben került át: sstephenson/bats#150 (hozzászólás).
Ha az eredeti sstephenson/bats van telepítve (ellenőrizd, hogy a bats -v 1.0-nál kisebb verziószámot ír-e ki), akkor válts a bats-core-ra; különben könnyen belefuthatsz megmagyarázhatatlan teszthibákba.