Testar um trabalhador de Asset compute
O projeto do Asset compute define um padrão para fácil criação e execução testes de trabalhadores Assets compute.
Anatomia de um teste do trabalhador
Os testes dos trabalhadores assets compute são divididos em conjuntos de testes e, em cada conjunto de testes, um ou mais casos de teste afirmam uma condição a ser testada.
A estrutura dos testes em um projeto do Asset compute é a seguinte:
/actions/<worker-name>/index.js
...
/test/
asset-compute/
<worker-name>/ <--- Test suite for the worker, must match the yaml key for this worker in manifest.yml
<test-case-1>/ <--- Specific test case
file.jpg <--- Input file (ie. `source.path` or `source.url`)
params.json <--- Parameters (ie. `rendition.instructions`)
rendition.png <--- Expected output file (ie. `rendition.path`)
<test-case-2>/ <--- Another specific test case for this worker
...
Cada conversão de teste pode ter os seguintes arquivos:
-
file.<extension>
- Arquivo de origem a ser testado (a extensão pode ser qualquer coisa, exceto
.link
) - Obrigatório
- Arquivo de origem a ser testado (a extensão pode ser qualquer coisa, exceto
-
rendition.<extension>
- Representação esperada
- Obrigatório, exceto para testes de erros
-
params.json
- As instruções do JSON de representação única
- Opcional
-
validate
- Um script que obtém os caminhos de arquivo de representação esperados e reais como argumentos e deve retornar o código de saída 0 se o resultado for ok, ou um código de saída diferente de zero se a validação ou comparação falhar.
- Opcional, o padrão é
diff
comando - Use um script de shell que envolva um comando de execução do docker para usar ferramentas de validação diferentes
-
mock-<host-name>.json
- Respostas HTTP formatadas em JSON para zombando de chamadas de serviço externas.
- Opcional, usado somente se o código do trabalhador fizer solicitações HTTP próprias
Escrever um caso de teste
Este caso de teste declara a entrada parametrizada (params.json
) para o arquivo de entrada (file.jpg
) gera a representação PNG esperada (rendition.png
).
-
Primeiro exclua os relatórios gerados automaticamente
simple-worker
testa o caso em/test/asset-compute/simple-worker
como isso é inválido, já que nosso trabalhador não copia mais simplesmente a origem para a representação. -
Criar uma nova pasta de casos de teste em
/test/asset-compute/worker/success-parameterized
para testar uma execução bem-sucedida do worker que gera uma representação PNG. -
No
success-parameterized
pasta, adicione o teste arquivo de entrada para este caso de teste e nomeie-ofile.jpg
. -
No
success-parameterized
, adicione um novo arquivo chamadoparams.json
que define os parâmetros de entrada do trabalhador:code language-json { "size": "400", "contrast": "0.25", "brightness": "-0.50" }
Esses são os mesmos valores/chaves passados para o Definição do perfil de Asset compute da ferramenta de desenvolvimento, menos o
worker
chave. -
Adicione o esperado arquivo de representação para este caso de teste e nomeie-o
rendition.png
. Este arquivo representa a saída esperada do trabalhador para a entrada especificadafile.jpg
. -
Na linha de comando, execute os testes na raiz do projeto executando
aio app test
- Assegurar Desktop Docker As imagens do Docker e de suporte foram instaladas e iniciadas
- Encerrar todas as instâncias da Ferramenta de desenvolvimento em execução
Gravação de um caso de teste de verificação de erro
Esse caso de teste testa para garantir que o trabalhador acione o erro apropriado quando o contrast
O parâmetro está definido com um valor inválido.
-
Criar uma nova pasta de casos de teste em
/test/asset-compute/worker/error-contrast
para testar uma execução incorreta do trabalhador devido a uma falhacontrast
valor do parâmetro. -
No
error-contrast
pasta, adicione o teste arquivo de entrada para este caso de teste e nomeie-ofile.jpg
. O conteúdo deste arquivo é irrelevante para este teste, ele só precisa existir para passar pela verificação "Fonte corrompida", a fim de alcançar orendition.instructions
verificações de validade, que este caso de teste valida. -
No
error-contrast
, adicione um novo arquivo chamadoparams.json
que define os parâmetros de entrada do trabalhador com o conteúdo:code language-json { "contrast": "10", "errorReason": "rendition_instructions_error" }
- Definir
contrast
parâmetros para10
, um valor inválido, pois o contraste deve estar entre -1 e 1, para gerar umRenditionInstructionsError
. - Declarar que o erro apropriado é lançado nos testes definindo o
errorReason
chave para o "motivo" associado ao erro esperado. Este parâmetro de contraste inválido lança o erro personalizado,RenditionInstructionsError
, por conseguinte, defina aerrorReason
ao motivo deste erro, ourendition_instructions_error
para afirmar que foi lançado.
- Definir
-
Como nenhuma representação deve ser gerada durante uma execução com erro, nenhuma
rendition.<extension>
arquivo é necessário. -
Execute o conjunto de testes na raiz do projeto executando o comando
aio app test
- Assegurar Desktop Docker As imagens do Docker e de suporte foram instaladas e iniciadas
- Encerrar todas as instâncias da Ferramenta de desenvolvimento em execução
Casos de teste no Github
Os casos de teste finais estão disponíveis no Github em: