Karma: executando um único arquivo de teste a partir da linha de comando

93

Então, estive procurando por isso, encontrei respostas "semelhantes" aqui, mas não exatamente o que eu queria.

Neste momento, se eu quiser testar um único arquivo com carma, preciso fazer fit(), fdescribe()no arquivo em questão ...

No entanto, o que eu quero é poder apenas chamar karma, com o arquivo de configuração, e direcioná-lo para um arquivo específico, para que não precise modificar o arquivo, ou seja:

karma run --conf karma.conf.js --file /path/to/specific/test_file.js

É possível fazer isso? Ou com algum ajudante? (usando grunhido ou gole?)

Gonçalo vieira
fonte
1
Tentou karma run -- --grep=testDescriptionFilter? Já vi isso sugerido antes, mas não consigo verificar em primeira mão se funciona. (Se eu estivesse em casa, tentaria antes de sugerir. Como não posso tentar - estou comentando em vez de responder.) :)
bvaughn
1
não é apenas para um específico it? Não há possibilidade de usá-lo para um arquivo?
Gonçalo Vieira
3
Para ser honesto, sempre modifiquei o karma.conf se quiser me concentrar em um único arquivo de teste. É fácil de fazer, mas nunca me esforcei para encontrar uma maneira mais rápida.
bvaughn
1
Cachorro quente. Ainda bem que ajudou. Postou. :)
bvaughn

Respostas:

59

Primeiro você precisa iniciar o servidor do karma com

karma start

Então, você pode usar o grep para filtrar um teste específico ou descrever o bloco:

karma run -- --grep=testDescriptionFilter
bvaughn
fonte
12
Esta resposta deve dizer que você deve karmaexecutar com karma startantes de executarkarma run
etagwerker
4
Eu realmente não acho que isso seja necessário, visto que a pergunta feita sobre como filtrar com karma run. Parecia muito claro que o autor da postagem sabia como iniciar o Karma e executar todos os testes e estava apenas procurando a sintaxe referente à filtragem.
bvaughn
2
O que posso fazer se quiser que isso aconteça de maneira programática? Ou seja, eu não saberia a descrição do arquivo que mudou, mas saberia seu nome.
MPV
2
Esta solução parece não funcionar com os testes de Jasmim (karma-jasmim). E o karma executado --help não mostra --grep como opção de comando. Estou usando o Karma mais recente (diz 1.5.0).
Yavin5
9
isso não executa um único teste!
dias
16

Mesmo que --filesnão seja mais compatível, você pode usar uma variável env para fornecer uma lista de arquivos:

// karma.conf.js
function getSpecs(specList) {
  if (specList) {
    return specList.split(',')
  } else {
    return ['**/*_spec.js'] // whatever your default glob is
  }
}

module.exports = function(config) {
  config.set({
    //...
    files: ['app.js'].concat(getSpecs(process.env.KARMA_SPECS))
  });
});

Então, na CLI:

$ env KARMA_SPECS="spec1.js,spec2.js" karma start karma.conf.js --single-run
Yuriy Kharchenko
fonte
1
Isso acaba funcionando muito bem! Apenas certifique-se de que seu glob padrão tem um nome de diretório na frente dele, ou então você obterá um erro de padrão. Além disso, mudei meus arquivos: definição assim: files: [] .concat (getSpecs (process.env.KARMA_SPECS)), E acabou funcionando melhor, pois a função já coloca no padrão glob ali se nenhuma variável de ambiente for conjunto. Ah, e eu não acho que você precisa do "env" na frente do comando (funciona para mim sem isso). Obrigado por esta solução @Yuriy Kharchenko!
Yavin5
6

Esta opção não é mais compatível com as versões recentes do karma:

Vejo https://github.com/karma-runner/karma/issues/1731#issuecomment-174227054

A matriz de arquivos pode ser redefinida usando a CLI da seguinte forma:

karma start --files=Array("test/Spec/services/myServiceSpec.js")

ou escapou:

karma start --files=Array\(\"test/Spec/services/myServiceSpec.js\"\)

Referências

Paul Sweatte
fonte
2
me dá este erro - bash: erro de sintaxe próximo ao token inesperado `('
Lakshay
5
então, quando tento fazer isso, recebo o seguinte erro config.files = config.files.map(createPatternObject).map(createPatternMapper(basePathResolve)):, que pode ser devido ao fato de que estou usando o requireJS?
Gonçalo Vieira
1
erm, não por causa de requireJS, por alguma razão estranha karma não está lendo Array ("zzz") como sendo um JS Array? O_o
Gonçalo Vieira
2
nm, parece que o karma não suporta mais um --files arg?
Gonçalo Vieira
23
Aviso para todos que vêm aqui, esta opção não é mais suportada no karma: github.com/karma-runner/karma/issues/…
dignifiedquire