Como testar o código de backend nodejs com Karma (testacular)

87

Como configuro o Karma para executar meus testes de unidade de back-end (escritos com Mocha)? Se eu adicionar meu script de teste de back-end ao files = [], ele falha, declarando que requireé indefinido.

Sylvain
fonte
Isso PODE ser feito, dê uma olhada no meu projeto: github.com/noamtcohen/Narma
noamtcohen

Respostas:

83

Você não. Karma serve apenas para testar o código baseado em navegador. Se você tiver um projeto com testes mocha no back-end e karma / mocha no front end, tente editar seu package.json em scripts para definir o teste para:mocha -R spec && karma run karma.con

Então, se npm testretornar verdadeiro, você saberá que é seguro confirmar ou implantar.

Dan Kohn
fonte
Obrigado! Eu encontrei uma solução usando o Grunt que já estava planejando configurar no meu projeto. Veja minha própria resposta.
Sylvain
Basicamente, todos os executores de teste para JS dependem de um navegador? Isso é inútil.
4
O Mocha e o Jasmine não dependem de um navegador e, quando você quiser executar em um navegador sem interface, considere o uso de phantomjs.
Dan Kohn
2
Observe que confiar em um navegador para teste NÃO é algo ruim. Existem diferentes tipos de testes e os testes ponta a ponta são válidos, dependendo de suas necessidades. Até mesmo testar a regressão visual (veja o huxley do Facebook) é importante em alguns casos.
Ciro Costa
15

Parece que não pode ser feito (obrigado @dankohn). Aqui está minha solução usando o Grunt:

  • Karma: atualize seu arquivo karma.conf.js

    • conjunto autoWatch = false;
    • conjunto singleRun = true;
    • definido browsers = ['PhantomJS'];(para ter resultados embutidos)
  • Grunhido:

    • npm install grunt-contrib-watch grunt-simple-mocha grunt-karma
    • configurar as duas tarefas grunt (ver arquivo grunt abaixo)

Gruntfile.js:

module.exports = function (grunt) {
  grunt.loadNpmTasks('grunt-simple-mocha');
  grunt.loadNpmTasks('grunt-karma');

  grunt.initConfig({
    simplemocha: {
      backend: {
        src: 'test/server-tests.js'
      }
    },
    karma: {
      unit: {
        configFile: 'karma.conf.js'
      }
    }
  });

  // Default task.
  grunt.registerTask('default', ['simplemocha', 'karma']);
};
  • Grunt (opcional): configure o grunt-watch para ser executado após alterar os arquivos de especificação ou os arquivos a serem testados.

  • execute todos usando o gruntcomando.

Sylvain
fonte
3
Portanto, você ainda precisa de um navegador, é só que ele é um navegador sem cabeça. Que inútil, definitivamente não usar karma para testes do lado do servidor.
5
Olá, não estou usando karma para back-end, estou usando mocha, portanto, nenhum navegador. Esta é apenas uma maneira conveniente de executar todos os seus testes assim que salvar um arquivo.
Sylvain
Embora eu realmente não precisasse do Karma para o que estava fazendo, isso me levou a um caminho fácil para configurar o grunt para executar meus testes de mocha automaticamente, então, obrigado por isso.
Michael Oryl
Abordagem interessante. Mas como você garante que Sails globais sejam devidamente reconhecidos em seus testes?
dmvianna