Scopri come testare gli esercizi di Bash su Exercism
Puoi usare l'editor online sul sito di Exercism per risolvere gli esercizi. Oppure scarica gli esercizi sul tuo computer, risolvili in locale e poi inviali a Exercism. Il resto di questo documento parla di come lavorare in locale.
Ti servirà lo strumento da riga di comando exercism per scaricare e inviare gli esercizi.
Vedi la documentazione della CLI di exercism.
Un aspetto fastidioso dello strumento exercism predefinito è che, dopo aver scaricato un esercizio, devi cambiare manualmente directory.
Questa funzione wrapper se ne occupa al posto tuo; salvala nel tuo ~/.bashrc.
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
}
Nota che non può essere uno script di shell, deve essere una function di shell. Gli script di shell vengono eseguiti in un processo figlio e non possono influire sull'ambiente (come la directory di lavoro corrente) della tua shell attuale.
Per i test sul track Bash, usiamo bats.
Esegui i test per il fantomatico esercizio «whatever» in questo modo:
cd /path/to/your/exercise_workspace/bash/whatever
bats whatever.bats
Se vuoi stampare l'output di debug mentre esegui i test in locale, vedi Debug in locale.
bats-core
Dovresti riuscire a installarlo dal tuo gestore di pacchetti preferito:
Su macOS con Homebrew dovrebbe essere qualcosa del genere:
$ 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 legacy.
Non installarlo per sbaglio: installa bats-core.bats è disponibile come pacchetto per Fedora 30 e versioni successive, puoi installarlo con
sudo dnf install bats
Per altre distribuzioni Linux, l'implementazione di bats che usiamo potrebbe non essere disponibile in pacchetti comodi.
Il modo migliore per installarla è dai sorgenti.
Se vuoi installarla in /usr/local, allora
git clone https://github.com/bats-core/bats-core
cd bats-core/
sudo ./install.sh /usr/local
Fatto questo, supponendo che /usr/local/bin sia nel tuo $PATH, ora puoi fare:
$ 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
Nota: se stai usando il vecchio https://github.com/sstephenson/bats.git e ti imbatti in un errore come cp: cannot create symbolic link '${HOME}/bin/bats': No such file or directory, devi copiare manualmente il contenuto della cartella bin/bats/libexec/ in ${HOME}/bin/.
Ci sono segnalazioni che le versioni più recenti di bats non funzionano bene su MinGW bash: prima di eseguire lo script di installazione, potresti voler fare:
$ git checkout v1.1.0
Per capire il significato dei vari comandi assert* nei test, fai riferimento alla documentazione della libreria bats-assert.
Risolvere un esercizio significa far passare tutti i suoi test. Per impostazione predefinita, quando esegui i test viene eseguito un solo test (il primo). È intenzionale: ti permette di concentrarti solo sul far passare quel singolo test. Una volta che passa, puoi abilitare il test successivo trasformando in commento o rimuovendo le
[[ $BATS_RUN_SKIPPED == true ]] || skip
annotazioni che precedono gli altri test.
Per eseguire tutti i test, compresi quelli con l'annotazione skip, puoi impostare la variabile d'ambiente BATS_RUN_SKIPPED al valore true.
Un modo per impostarla solo per la durata dell'esecuzione di bats è:
BATS_RUN_SKIPPED=true bats exercise_name.bats
Può essere comodo usare una funzione wrapper per risparmiare digitazione:
bats() {
BATS_RUN_SKIPPED=true command bats *.bats
}
Poi esegui i test semplicemente con:
bats
bats legacybats-core è nato come fork di l'implementazione originale di bats.
Il progetto sstephenson/bats era piuttosto pieno di bug ed era stato abbandonato.
La proprietà è stata ceduta nel 2017: sstephenson/bats#150 (commento).
Se hai installato l'originale sstephenson/bats (controlla con bats -v: se riporta un numero di versione inferiore a 1.0), allora dovresti passare a bats-core; altrimenti potresti ritrovarti a subire inspiegabili fallimenti dei test.