Scopri come testare i tuoi esercizi di Pyret su Exercism
Dopo aver scaricato un esercizio, dovrai installare i moduli di Node.js per eseguire i test:
cd /path/to/exercise
npm install
Poi aggiungi al tuo $PATH la directory che contiene lo strumento da riga di comando pyret
# bash
PATH="./node_modules/.bin:$PATH"
# zsh
path=(./node_modules/.bin $path)
# fish
fish_add_path ./node_modules/.bin
All'interno della directory dell'esercizio ci saranno diversi file, ma i due più importanti sono il file della soluzione e il file dei test. Nell'esempio seguente abbiamo scaricato l'esercizio Leap.
leap/
├── leap.arr # Solution file - your code goes here
├── leap-test.arr # Test cases for the exercise
Per eseguire i test, usa exercism test se hai scaricato la CLI ufficiale di Exercism, oppure esegui pyret leap-test.arr.
Pyret eseguirà la suite di test, che consiste in una serie di blocchi check etichettati che verificano il file della soluzione rispetto a input specifici e risultati attesi.
Una parte fondamentale di questo processo è esportare esplicitamente porzioni del codice, in modo che la suite di test possa vederle.
I test di questa traccia importeranno il file, dando accesso a tutto ciò che viene esportato esplicitamente dal codice.
Per esportare le variabili, devi aggiungere una istruzione provide all'inizio del file.
Gli snippet seguenti sono due modi validi per esportare a, b e c.
# using a list of bindings
provide a, b, c end
# using an object literal
provide {
a: a,
b: b,
c: c
}
end
Un terzo metodo, provide *, è una scorciatoia per esportare tutti i binding di primo livello, tranne i tipi di dati personalizzati. Tuttavia, in genere non è consigliato, perché Pyret è severo nel non permettere lo shadowing.
Alcuni esercizi richiederanno che venga esportato un tipo di dati personalizzato a scopo di test.
In questi casi, puoi usare una istruzione provide-types.
Dato che un tipo di dati ha funzioni aggiuntive che potrebbero non essere esportate, è consigliabile usare provide-types *, nonostante il problema dello shadowing.
provide-types *
data MyPoint:
| two-dim(x, y)
| three-dim(x, y, z)
end
Tutti gli stub degli esercizi avranno già pronte delle istruzioni provide o provide-types da usare.