Tanuld meg, hogyan teszteld a Pyret feladataidat az Exercism-ön
Miután sikeresen letöltöttél egy feladatot, telepítened kell a Node.js modulokat a tesztek futtatásához:
cd /path/to/exercise
npm install
Ezután add hozzá a pyret parancssori eszközt tartalmazó könyvtárat a $PATH-hoz
# bash
PATH="./node_modules/.bin:$PATH"
# zsh
path=(./node_modules/.bin $path)
# fish
fish_add_path ./node_modules/.bin
A feladat könyvtárában több fájl is lesz, de a két legfontosabb a megoldásod és a tesztfájljaid. A következő példában a Leap feladatot töltöttük le.
leap/
├── leap.arr # Solution file - your code goes here
├── leap-test.arr # Test cases for the exercise
A tesztek futtatásához használd az exercism test parancsot, ha letöltötted a hivatalos Exercism CLI-t, vagy futtasd a pyret leap-test.arr parancsot.
A Pyret lefuttatja a tesztegyüttest, amely címkézett check blokkok sorozatából áll; ezek a megoldásfájlodat ellenőrzik adott bemenetekkel és elvárt eredményekkel.
A folyamat kritikus része, hogy kifejezetten exportáld a kódod egyes részeit, hogy a tesztegyüttes láthassa őket.
Ezen a kurzson a tesztek importálják a fájlodat, így hozzáférnek mindenhez, amit kifejezetten exportáltál a kódból.
A változók exportálásához egy provide utasítást kell hozzáadnod a fájlod elején.
A következő kódrészletek két érvényes módot mutatnak az a, b és c exportálására.
# using a list of bindings
provide a, b, c end
# using an object literal
provide {
a: a,
b: b,
c: c
}
end
Egy harmadik módszer, a provide *, rövidítés arra, hogy az összes felső szintű kötést exportáld a saját adattípusok kivételével.
Általában azonban mégsem ajánlott, mert a Pyret szigorúan nem engedi a változóárnyékolást.
Egyes feladatokhoz szükség lesz arra, hogy egy saját adattípust exportálj a teszteléshez.
Ilyen esetekben használhatsz provide-types utasítást.
Mivel egy adattípushoz további függvények tartozhatnak, amelyek nincsenek exportálva, érdemes a provide-types *-ot használni az árnyékolási aggály ellenére.
provide-types *
data MyPoint:
| two-dim(x, y)
| three-dim(x, y, z)
end
Minden feladat vázában vagy provide, vagy provide-types utasítás lesz előkészítve a számodra.