Jak zainstalować i uruchomić Mocha, moduł testowy Node.js? Otrzymanie komunikatu „mocha: polecenie nie znaleziono” po instalacji


90

Mam problemy z uruchomieniem Mocha zgodnie z oczekiwaniami i chciałbym powiedzieć, że jest to udokumentowane, ale (wydaje się) nie ma zbyt dużej dokumentacji na temat faktycznego uruchomienia.

Zainstalowałem go używając npm(zarówno globalnie, jak i lokalnie) i za każdym razem, gdy go uruchamiam, otrzymuję:

$ mocha
mocha: command not found

Ok, więc pomyślałem, że nie ma go w moim PATH, więc spróbowałem uruchomić go bezpośrednio,

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

W końcu spróbowałem trafić w inny binplik i otrzymałem:

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

  .

  ✔ 1 tests complete (1ms)

Jak mogę po prostu wykonać testy za pomocą jednego polecenia? Ślubowanie wydaje się na to pozwalać, ale słyszałem, że Mocha jest lepszym wyborem, po prostu nie mogę sprawić, by działała poprawnie.

Jakieś przemyślenia na temat błędu, który przedstawiłem powyżej w trzeciej próbie?

Edytować:

Biegnę,

  • Ubuntu 11.10 64-bitowy
  • Node.js 0.7.5
  • npm 1.1.8
  • mokka 0.14.1
  • powinno 0.6.0

2
Z węzłem 0.6.12, npm 1.1.4 i wykonywaniem npm install mocha, otrzymuję ./node_modules/.bin/mochazgodnie z oczekiwaniami. sudo npm install -g mochadostaje mnie /usr/local/bin/mocha. Jeśli to nie działa poprawnie w twoim środowisku, może to być błąd lub po prostu mokka nie została zaktualizowana do obsługi węzła 0.7. *. Jeśli chodzi o Twoje ostrzeżenie amortyzacyjne, existsa existsSynczostały przeniesione z pathaby fsw węźle 0.7.1.
Linus Thiel

Zdegradowałem do Node.js 0.6.12, dodałem „./node_modules/.bin” do mojej PATH i ze światem wszystko jest w porządku.
Stephen Melrose,

Odpowiedzi:


179

od npm 5.2.0 jest nowe polecenie „npx” dołączone do npm, które znacznie upraszcza to, jeśli uruchomisz:

npx mocha <args>

Uwaga: opcjonalne argumenty są przekazywane do wykonywanego polecenia (w tym przypadku mokka)

to automatycznie wybierze wykonywalne polecenie „mokka” z lokalnie zainstalowanej mokki (zawsze dodawaj je jako zależność dev, aby mieć pewność, że poprawne będzie zawsze używane przez Ciebie i wszystkich innych).

Uważaj jednak, jeśli nie zainstalowałeś mokki, to polecenie automatycznie pobierze i użyje najnowszej wersji, co jest świetne dla niektórych narzędzi (na przykład rusztowań), ale może nie być najbardziej zalecane w przypadku niektórych zależności, w których możesz chcieć przypiąć do określonej wersji.

Możesz przeczytać więcej o npx tutaj


Teraz, jeśli zamiast bezpośrednio wywoływać mokkę, chcesz zdefiniować niestandardowy skrypt npm, alias, który może wywoływać inne pliki binarne npm ...

nie chcesz, aby testy biblioteki kończyły się niepowodzeniem w zależności od konfiguracji maszyny (mokka jako globalna, globalna wersja mokka itp.), sposób korzystania z lokalnej mokki działającej na wielu platformach to:

node node_modules/.bin/mocha

npm umieszcza aliasy we wszystkich plikach binarnych w zależnościach od tego specjalnego folderu. Na koniec npm automatycznie doda node_modules / .bin do PATH podczas uruchamiania skryptu npm, więc w pliku package.json możesz po prostu:

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

i wywołaj go za pomocą

npm test

1
+1, używam mokki jakiś czas temu, ale nie zdawałem sobie z tego sprawy. To powinna być akceptowana odpowiedź!
gihanchanuka

6
@ michael.kebe nie, nie musisz określać tej ścieżki, aby użyć lokalnej mokki, npm już dodaje "./node_modules/.bin" do $ PATH, więc domyślnie użyje wersji lokalnej.
Benja

Uważam, że polecenie powinno być węzłem node_modules / mocha / bin / mocha, a nie węzłem node_modules / .bin / mocha
Mina Luke

3
@MinaLuke, który też działa, ale to zły pomysł, /node_modules/.bin/{module-binary-name}jest to miejsce, w którym npm umieszcza skróty do plików binarnych w twoich zależnościach, nie powinieneś odwoływać się bezpośrednio do pliku w źródłach zależności, ponieważ może to zepsuć się w następnej wersji.
Benja

1
@DougBarbieri niezły chwyt, to stara odpowiedź, zaktualizuję, żeby wspomnieć npx, dzięki!
Benja

18

Po dalszym przeczytaniu i potwierdzeniu przez Linusa G Thiela powyżej stwierdziłem, że po prostu muszę,

  • Przejdź na Node.js 0.6.12
  • I albo
    • Zainstaluj Mocha jako globalną
    • Dodaj ./node_modules/.bindo mojegoPATH

4
Mam węzeł 0.8.12 i mokkę zainstalowane globalnie i lokalnie (dla różnych projektów) i działają. Nie ma więc potrzeby obniżania wersji node. W przypadku lokalnie zainstalowanej mokki, po prostu upewnij się, że PATH jest ustawiona jak powyżej, lub wywołaj ją bezpośrednio ze skryptu (Makefile lub tag „scripts”).
Qichao Dong

1
Mocha została zainstalowana lokalnie i globalnie, ale nie znaleziono jej w ścieżce (Win8). Musiałem ręcznie dodać folder „./node_modules/.bin” względem mojego projektu do mojej PATH, zrestartuj konsolę, a następnie wpisz „mocha”. Nie jest to idealne rozwiązanie, ale szybki hack, aby to zadziałało. Być może, gdybyś miał lokalizację najwyższego poziomu, aby zainstalować lokalnie mokkę, połącz się z tą ŚCIEŻKĄ, aby móc jej użyć gdzie indziej.
Ali

1

Dla Windowsa :

Package.json

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

następnie uruchom polecenie

npm run test

1

Podczas instalacji modułów węzłów dla mokki wypróbowałem poniższe polecenia

  • npm install
  • npm zainstaluj mokkę
  • npm install --save-dev mocha
  • npm install mocha -g #, aby zainstalować go również globalnie

i podczas uruchamiania lub wykonywania testu mokki, który próbowałem

  • test mokki
  • npm uruchom test
  • test mokka test \ index.test.js
  • npm test

ale otrzymywałem poniższy błąd jako:

„Mocha” nie jest rozpoznawana jako polecenie wewnętrzne ani zewnętrzne

Tak więc, po wypróbowaniu wszystkiego, co wyszło, po prostu ustaw ścieżkę do zmiennych środowiskowych w Zmienne systemowe jako:

C: \ Pliki programów \ nodejs \

i zadziałało :)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.