Testar no percurso de Pyret

Aprende a testar os teus exercícios de Pyret no Exercism


Instalar os pré-requisitos

Depois de descarregares um exercício com êxito, vais ter de instalar os módulos do Node.js para correres os testes:

cd /path/to/exercise
npm install

Depois, adiciona o diretório que contém a ferramenta de linha de comandos pyret ao teu $PATH

# bash
PATH="./node_modules/.bin:$PATH"

# zsh
path=(./node_modules/.bin $path)

# fish
fish_add_path ./node_modules/.bin

Primeiros passos

Vais encontrar vários ficheiros dentro do diretório do exercício, mas os dois mais importantes são o teu ficheiro de solução e o ficheiro de testes. No exemplo seguinte, descarregámos o exercício Leap.

leap/
├── leap.arr       # Solution file - your code goes here
├── leap-test.arr  # Test cases for the exercise

Para correres os testes, usa exercism test se tiveres descarregado a CLI oficial do Exercism, ou corre pyret leap-test.arr. O Pyret corre o conjunto de testes, que é composto por uma série de blocos check etiquetados que testam o teu ficheiro de solução com entradas e resultados esperados específicos. Uma parte essencial deste processo é exportar explicitamente partes do teu código, para que o conjunto de testes as consiga ver.

provide

Os testes desta track importam o teu ficheiro, o que dá acesso a tudo o que for explicitamente exportado do teu código.

Para exportares variáveis, tens de adicionar uma instrução provide no início do teu ficheiro.

Os excertos seguintes são duas formas válidas de exportar 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

Um terceiro método, provide *, é uma forma abreviada de exportar todas as ligações de nível superior, exceto os tipos de dados personalizados. No entanto, geralmente não é recomendado, porque o Pyret não permite shadowing e é rigoroso nesse aspeto.

provide-types

Alguns exercícios vão exigir que um tipo de dados personalizado seja exportado para efeitos de teste. Nessas situações, podes usar uma instrução provide-types. Como um tipo de dados tem funções adicionais que podem não estar exportadas, aconselha-se a usar provide-types *, apesar da questão do shadowing.

provide-types *

data MyPoint:
  | two-dim(x, y)
  | three-dim(x, y, z)
end

Todos os esboços dos exercícios terão instruções provide ou provide-types já preparadas para tu usares.