Testando javascript com Mocha - como posso usar console.log para depurar um teste?

104

Estou usando o executor de teste javascript "Mocha".

Eu tenho um teste que está falhando, então gostaria de depurá-lo usando console.log.

Mas quando os testes são executados, não há saída (apenas os resultados do teste do Mocha). Parece que Mocha capturou e suprimiu minha console.logsaída!

Como posso fazer com que o Mocha mostre minha saída? (em para testes que falham)?

EDITAR:

Grandes desculpas! - console.logfunciona durante os testes! Devo ter esperado que ele suprimisse a saída e não verifiquei corretamente meu próprio código. Obrigado por responder. Então ... dito isso ... talvez seja realmente bom suprimir a saída de testes que passam? Hmm...

Em uma nota relacionada: eu quero usar console.logporque estou tendo muitos problemas ao tentar fazer com que o depurador Eclipse se conecte ao node.js.

Eu sou o único que acha isso complicado? Como vocês debugam o node.js? Com um depurador ou com console.loginstruções?

Nick Perkins
fonte
Bom negócio! :) No momento, ainda estou 'depurando' o nó por meio de testes Moca. Eu vejo um tempo no futuro próximo em que eu possa querer avaliar algumas das opções aqui: stackoverflow.com/questions/1911015/…
Zach Bonham
Eu sugeriria que você não use Eclipse para Node.js, realmente não é o melhor ambiente para usar IMO. O WebStorm da JetBrains é um ótimo IDE Node.js, embora custe dinheiro. Se você está procurando por algo gratuito, realmente estou gostando do novo Visual Studio Code, que tem um ótimo suporte integrado para depuração do Node e outras coisas que tornam o desenvolvimento do Node bom.
dsw88
@ dsw88 - Minha experiência com o WebStorm é que ele ficou mais lento quando nossa estrutura de arquivos começou a ficar grande e profunda. Me lembrou dos velhos tempos com aplicativos Java.
kirk.burleson
2
Além do que @ dsw88 escreveu: Use o código VS: Insira um "depurador;" declaração em algum lugar em seu código. Comece seu teste com a opção --inspect-brk e use a ação de depuração "NodeJs attach" do VS Code. O depurador começa na primeira linha do script mocha e você terá que pressionar Resume uma vez. Na próxima vez, seu "depurador;" declaração for alcançada, você está pronto para ir.
FabianTe

Respostas:

49

Quais opções de Mocha você está usando?

Talvez tenha a ver com o uso de repórter (-R) ou ui (-ui)?

console.log(msg);

funciona bem durante minhas execuções de teste, embora às vezes misturado a um pouco bobo. Presumivelmente, devido à natureza assíncrona da execução do teste.

Aqui estão as opções (mocha.opts) que estou usando:

--require should
-R spec
--ui bdd

Hmm .. acabei de testar sem qualquer mocha.opts e console.logainda funciona.

Zach Bonham
fonte
4
onde log () realmente faz o lote TO?
PositiveGuy
32

Se você estiver testando código assíncrono, certifique-se de colocar done()no retorno de chamada desse código assíncrono. Tive esse problema ao testar solicitações de http para uma API REST.

Kevin C.
fonte
20

Você também pode ter colocado seu console.logafter uma expectativa que falha e não é capturada, de forma que sua linha de log nunca seja executada.

qix
fonte
2
Sim, esse era o meu problema, obrigado por sugerir isso. Mudei os logs do console para ANTES do .expect com falha e eles aparecem agora.
redfox05
-1

Use a biblioteca de depuração .

import debug from 'debug'
const log = debug('server');

Use-o:

log('holi')

então corra:

DEBUG=server npm test

E é isso!

Sebastián Lara
fonte