Lerne, wie du deine Pyret-Übungen auf Exercism testest
Nachdem du eine Übung erfolgreich heruntergeladen hast, musst du die Node.js-Module installieren, um die Tests auszuführen:
cd /path/to/exercise
npm install
Füge dann das Verzeichnis mit dem pyret-Kommandozeilen-Tool zu deinem $PATH hinzu
# bash
PATH="./node_modules/.bin:$PATH"
# zsh
path=(./node_modules/.bin $path)
# fish
fish_add_path ./node_modules/.bin
Im Übungsverzeichnis gibt es mehrere Dateien, aber die zwei wichtigsten sind deine Lösungs- und deine Testdatei. Im folgenden Beispiel haben wir die Übung Schaltjahr heruntergeladen.
leap/
├── leap.arr # Solution file - your code goes here
├── leap-test.arr # Test cases for the exercise
Um die Tests auszuführen, verwendest du entweder exercism test, wenn du die offizielle Exercism CLI heruntergeladen hast, oder du führst pyret leap-test.arr aus.
Pyret führt die Testsuite aus, die aus einer Reihe von beschrifteten check-Blöcken besteht, die deine Lösungsdatei mit bestimmten Eingaben und erwarteten Ergebnissen testen.
Ein entscheidender Teil dieses Vorgangs ist, Teile deines Codes explizit zu exportieren, damit die Testsuite sie sehen kann.
Die Tests in diesem Track importieren deine Datei und erhalten so Zugriff auf alles, was explizit aus deinem Code exportiert wird.
Um Variablen zu exportieren, musst du am Anfang deiner Datei eine provide-Anweisung einfügen.
Die folgenden Codeausschnitte sind zwei gültige Möglichkeiten, a, b und c zu exportieren.
# using a list of bindings
provide a, b, c end
# using an object literal
provide {
a: a,
b: b,
c: c
}
end
Eine dritte Methode, provide *, ist eine Kurzform, um alle Bindungen der obersten Ebene außer benutzerdefinierten Datentypen zu exportieren.
Sie wird jedoch im Allgemeinen nicht empfohlen, weil Pyret beim Verbot von Shadowing streng ist.
Bei manchen Übungen muss ein benutzerdefinierter Datentyp für Testzwecke exportiert werden.
In diesen Fällen kannst du eine provide-types-Anweisung verwenden.
Da ein Datentyp zusätzliche Funktionen hat, die möglicherweise nicht exportiert werden, ist es ratsam, provide-types * zu verwenden, trotz der Bedenken wegen Shadowing.
provide-types *
data MyPoint:
| two-dim(x, y)
| three-dim(x, y, z)
end
Alle Übungs-Stubs enthalten entweder provide- oder provide-types-Anweisungen, die für dich vorbereitet sind.