Como você instala e executa o Mocha, o módulo de teste do Node.js. Obtendo “mocha: comando não encontrado” após a instalação

89

Estou tendo problemas para fazer com que o Mocha funcione conforme o esperado e adoraria dizer que está documentado, mas (parece) não haver muita documentação sobre como fazê-lo funcionar.

Eu instalei usando npm(global e localmente), e cada vez que eu o executo, recebo:

$ mocha
mocha: command not found

Ok, percebi que não está no meu PATH, então tentei executá-lo diretamente,

$ ./node_modules/mocha/bin/mocha 
execvp(): No such file or directory

Por fim, tentei acessar o outro binarquivo e consegui,

$ ./node_modules/mocha/bin/_mocha 
path.existsSync is deprecated. It is now called `fs.existsSync`.

  .

   1 tests complete (1ms)

Como posso apenas executar meus testes com um único comando? Parece que os votos permitem, mas ouvi dizer que Mocha é a melhor escolha, mas não consigo fazer com que funcione corretamente.

E alguma opinião sobre o erro que obtive acima na minha terceira tentativa?

Editar:

Estou correndo,

  • Ubuntu 11.10 64 bits
  • Node.js 0.7.5
  • npm 1.1.8
  • mocha 0.14.1
  • deveria 0,6.0
Stephen Melrose
fonte
2
Com o nó 0.6.12, npm 1.1.4, e em execução npm install mocha, obtenho ./node_modules/.bin/mochao esperado. sudo npm install -g mochame pega /usr/local/bin/mocha. Se isso não funcionar corretamente em seu ambiente, pode ser um bug ou apenas mocha não atualizado para suportar o nó 0.7. *. Quanto à sua advertência depreciação, existse existsSyncforam movidos de pathpara fsno nó 0.7.1.
Linus Thiel
Fiz downgrade para Node.js 0.6.12, adicionei "./node_modules/.bin" ao meu PATH e está tudo certo com o mundo.
Stephen Melrose,

Respostas:

177

desde o npm 5.2.0, há um novo comando "npx" incluído no npm que torna isso muito mais simples, se você executar:

npx mocha <args>

Nota: os argumentos opcionais são encaminhados para o comando que está sendo executado (mocha neste caso)

isso irá escolher automaticamente o comando executável "mocha" do seu mocha instalado localmente (sempre adicione-o como uma dependência dev para garantir que o correto seja sempre usado por você e todos os outros).

Tenha cuidado, porém, que se você não instalou o mocha, este comando irá buscar e usar automaticamente a versão mais recente, o que é ótimo para algumas ferramentas (como scaffolders, por exemplo), mas pode não ser o mais recomendável para certas dependências onde você pode querer fixar em uma versão específica.

Você pode ler mais sobre npx aqui


Agora, se em vez de invocar o mocha diretamente, você deseja definir um script npm personalizado, um alias que pode invocar outros binários npm ...

você não quer que seus testes de biblioteca falhem dependendo da configuração da máquina (mocha como global, versão global do mocha, etc), a maneira de usar o mocha local que funciona em várias plataformas é:

node node_modules/.bin/mocha

O npm coloca aliases para todos os binários em suas dependências nessa pasta especial. Por fim, o npm adicionará node_modules / .bin ao PATH automaticamente ao executar um script npm, portanto, em seu package.json, você pode fazer apenas:

"scripts": {
  "test": "mocha"
}

e invocá-lo com

npm test
Benja
fonte
1
+1, uso mocha há algum tempo, mas não percebi. Esta deve ser a resposta aceita!
gihanchanuka
6
@ michael.kebe não, você não precisa especificar esse caminho para usar o mocha local, o npm já adiciona "./node_modules/.bin" ao $ PATH, então ele usará a versão local por padrão.
Benja
Eu acredito que o comando deve ser node node_modules / mocha / bin / mocha e não node node_modules / .bin / mocha
Mina Luke
3
@MinaLuke que funciona também, mas é uma má ideia, /node_modules/.bin/{module-binary-name}é o lugar onde o npm coloca atalhos para binários em suas dependências, você não deve referenciar diretamente um arquivo nas fontes de uma dependência, pois isso pode falhar na próxima versão.
Benja
1
@DougBarbieri boa captura, é uma resposta antiga, vou atualizar para mencionar npx, obrigado!
Benja
18

Após leitura adicional e confirmação de Linus G Thiel acima, descobri que simplesmente precisava,

  • Downgrade para Node.js 0.6.12
  • E também,
    • Instale o Mocha como global
    • Adicionar ./node_modules/.binao meuPATH
Stephen Melrose
fonte
4
Tenho o nó 0.8.12 e o mocha instalados global e localmente (para diferentes projetos) e estão funcionando. Portanto, não há necessidade de fazer o downgrade do nó. Para mocha instalado localmente, certifique-se de que seu PATH esteja definido como acima ou chame-o diretamente de seu script (Makefile ou tag "scripts").
Qichao Dong
1
Eu tinha o Mocha instalado local e globalmente, mas não foi encontrado no caminho (Win8). Tive que adicionar manualmente a pasta './node_modules/.bin' relativa ao meu projeto ao meu PATH, reiniciar o console e digitar 'mocha' funcionaria. Não é o ideal, mas é um truque rápido para fazê-lo funcionar. Talvez se você tivesse um local de nível superior para instalar o mocha localmente, vincule-se a esse PATH para que possa usá-lo em outro lugar.
Ali
1

Para Windows :

Package.json

  "scripts": {
    "start": "nodemon app.js",
    "test": "mocha"
  },

então execute o comando

npm run test
Ashutosh Jha
fonte
1

Ao instalar os módulos de nó para mocha, tentei os comandos abaixo

  • npm install
  • npm install mocha
  • npm install --save-dev mocha
  • npm install mocha -g # para instalá-lo globalmente também

e ao rodar ou executar o teste mocha que estava tentando

  • teste moca
  • teste de execução npm
  • teste mocha test \ index.test.js
  • teste npm

mas eu estava recebendo o erro abaixo como:

'Mocha' não é reconhecido como comando interno ou externo

Então, depois de tentar de tudo, acabou-se por definir o caminho para as variáveis ​​de ambiente nas Variáveis ​​do Sistema como:

C: \ Arquivos de programas \ nodejs \

e funcionou :)

DHEERAJ
fonte