Μάθε πώς να δοκιμάζεις τις ασκήσεις σου σε Bash στο Exercism
Μπορείς να χρησιμοποιήσεις τον διαδικτυακό επεξεργαστή στην ιστοσελίδα του Exercism για να λύσεις τις ασκήσεις. Ή κατέβασε τις ασκήσεις στον υπολογιστή σου, λύσέ τις τοπικά και μετά υπόβαλέ τις στο Exercism. Το υπόλοιπο αυτού του εγγράφου αφορά την τοπική εργασία.
Θα χρειαστείς το εργαλείο γραμμής εντολών exercism για να κατεβάσεις και να υποβάλεις ασκήσεις.
Δες την τεκμηρίωση του Exercism CLI.
Ένα ενοχλητικό σημείο του προεπιλεγμένου εργαλείου exercism είναι ότι, αφού κατεβάσεις μια άσκηση, πρέπει να αλλάξεις κατάλογο χειροκίνητα.
Αυτή η συνάρτηση-περιτύλιγμα το κάνει για σένα. Αποθήκευσέ την στο ~/.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
}
Σημείωσε ότι δεν μπορεί να είναι σενάριο κελύφους, πρέπει να είναι συνάρτηση κελύφους. Τα σενάρια κελύφους εκτελούνται σε θυγατρική διεργασία και δεν μπορούν να επηρεάσουν το περιβάλλον (όπως τον τρέχοντα κατάλογο εργασίας) του τρέχοντος κελύφους σου.
Για τις δοκιμές στη διαδρομή bash χρησιμοποιούμε το bats.
Τρέξε τις δοκιμές για την υποθετική άσκηση "whatever" κάπως έτσι:
cd /path/to/your/exercise_workspace/bash/whatever
bats whatever.bats
Αν θέλεις να εκτυπώσεις έξοδο αποσφαλμάτωσης όταν τρέχεις τις δοκιμές τοπικά, δες Αποσφαλμάτωση τοπικά.
bats-core
Θα πρέπει να μπορείς να το εγκαταστήσεις από τον αγαπημένο σου διαχειριστή πακέτων:
Στο macOS με το Homebrew θα έμοιαζε κάπως έτσι:
$ 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 υπάρχει επίσης στο οικοσύστημα του Homebrew.
Μην το εγκαταστήσεις κατά λάθος: εγκατέστησε το bats-core.Το bats υπάρχει σε πακέτο για Fedora 30 και νεότερες, μπορείς να το εγκαταστήσεις με
sudo dnf install bats
Για άλλες διανομές Linux, η υλοποίηση του bats που χρησιμοποιούμε μπορεί να μην υπάρχει σε βολικό πακέτο.
Ο καλύτερος τρόπος να το εγκαταστήσεις είναι από τον πηγαίο κώδικα.
Αν θέλεις να το εγκαταστήσεις στο /usr/local, τότε
git clone https://github.com/bats-core/bats-core
cd bats-core/
sudo ./install.sh /usr/local
Στη συνέχεια, αν υποθέσουμε ότι το /usr/local/bin είναι στο $PATH σου, μπορείς τώρα να τρέξεις:
$ 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
Σημείωση: Όταν χρησιμοποιείς το παρωχημένο https://github.com/sstephenson/bats.git και ανακαλύψεις ένα σφάλμα σαν το cp: cannot create symbolic link '${HOME}/bin/bats': No such file or directory, πρέπει να αντιγράψεις χειροκίνητα το περιεχόμενο του φακέλου bin/bats/libexec/ στο ${HOME}/bin/.
Υπάρχουν αναφορές ότι οι νεότερες εκδόσεις του bats δεν συμπεριφέρονται καλά στο MinGW bash. Πριν τρέξεις το σενάριο εγκατάστασης, ίσως θέλεις να τρέξεις:
$ git checkout v1.1.0
Για βοήθεια σχετικά με τη σημασία των διάφορων εντολών assert* στις δοκιμές, δες την τεκμηρίωση της βιβλιοθήκης bats-assert.
Το να λύσεις μια άσκηση σημαίνει να κάνεις όλες τις δοκιμές της να περάσουν. Από προεπιλογή, όταν τρέχεις τις δοκιμές εκτελείται μόνο μία δοκιμή (η πρώτη). Αυτό γίνεται σκόπιμα, ώστε να μπορείς να επικεντρωθείς στο να περάσει μόνο αυτή η μία δοκιμή. Μόλις περάσει, μπορείς να ενεργοποιήσεις την επόμενη δοκιμή σχολιάζοντας ή αφαιρώντας τις
[[ $BATS_RUN_SKIPPED == true ]] || skip
σημειώσεις που προηγούνται των υπόλοιπων δοκιμών.
Για να τρέξεις όλες τις δοκιμές, μαζί και αυτές με σημειώσεις skip, μπορείς να ορίσεις τη μεταβλητή περιβάλλοντος BATS_RUN_SKIPPED στην τιμή true.
Ένας τρόπος να το ορίσεις μόνο για τη διάρκεια εκτέλεσης του bats είναι:
BATS_RUN_SKIPPED=true bats exercise_name.bats
Μπορεί να σου φανεί βολικό να χρησιμοποιήσεις μια συνάρτηση-περιτύλιγμα για να γλιτώσεις πληκτρολόγηση:
bats() {
BATS_RUN_SKIPPED=true command bats *.bats
}
Έπειτα τρέξε τις δοκιμές απλώς με:
bats
bats
Το bats-core δημιουργήθηκε ως fork του αρχικού bats.
Το έργο sstephenson/bats είχε αρκετά bugs και είχε εγκαταλειφθεί.
Η ιδιοκτησία πέρασε σε άλλα χέρια το 2017: sstephenson/bats#150 (σχόλιο).
Αν έχεις εγκατεστημένο το αρχικό sstephenson/bats (έλεγξέ το με bats -v, αν αναφέρει αριθμό έκδοσης μικρότερο του 1.0), τότε καλό είναι να περάσεις στο bats-core. Αλλιώς, μπορεί να βρεθείς αντιμέτωπος με ανεξήγητες αποτυχίες δοκιμών.