Bagaimana Anda menginstal dan menjalankan Mocha, modul pengujian Node.js? Mendapatkan "mocha: perintah tidak ditemukan" setelah penginstalan

90

Saya mengalami masalah dalam membuat Mocha bekerja seperti yang diharapkan, dan saya ingin mengatakan seperti yang didokumentasikan, tetapi (tampaknya) tidak banyak dokumentasi tentang benar-benar menjalankannya.

Saya telah menginstalnya menggunakan npm(baik secara global maupun lokal), dan setiap kali saya menjalankannya saya mendapatkan:

$ mocha
mocha: command not found

Oke, jadi saya pikir itu tidak ada di saya PATH, jadi saya mencoba menjalankannya secara langsung,

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

Akhirnya, saya mencoba membuka binfile lain , dan mendapatkan,

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

  .

  ✔ 1 tests complete (1ms)

Bagaimana saya bisa menjalankan pengujian saya dengan satu perintah? Tampaknya sumpah mengizinkanmu, tetapi kudengar Mocha adalah pilihan yang lebih baik, sepertinya aku tidak bisa membuatnya berfungsi dengan benar.

Dan ada pemikiran tentang kesalahan yang saya dapatkan di atas dalam upaya ketiga saya?

Edit:

Saya sedang berlari,

  • Ubuntu 11.10 64-bit
  • Node.js 0.7.5
  • npm 1.1.8
  • moka 0.14.1
  • harus 0.6.0
Stephen Melrose
sumber
2
Dengan node 0.6.12, npm 1.1.4, dan mengeksekusi npm install mocha, saya mendapatkan ./node_modules/.bin/mochaseperti yang diharapkan. sudo npm install -g mochamenangkap saya /usr/local/bin/mocha. Jika ini tidak berfungsi dengan baik di lingkungan Anda, ini mungkin bug, atau hanya mocha tidak diperbarui untuk mendukung node 0.7. *. Mengenai peringatan penghentian Anda, existsdan existsSyncdipindahkan dari pathke fsdalam node 0.7.1.
Linus Thiel
Saya menurunkan versi ke Node.js 0.6.12, menambahkan "./node_modules/.bin" ke PATH saya, dan semuanya baik-baik saja dengan dunia.
Stephen Melrose

Jawaban:

180

sejak npm 5.2.0, ada perintah baru "npx" yang disertakan dengan npm yang membuatnya lebih sederhana, jika Anda menjalankan:

npx mocha <args>

Catatan: argumen opsional diteruskan ke perintah yang sedang dijalankan (dalam hal ini mocha)

ini secara otomatis akan memilih perintah "mocha" yang dapat dieksekusi dari mocha yang diinstal secara lokal (selalu tambahkan sebagai ketergantungan dev untuk memastikan perintah yang benar selalu digunakan oleh Anda dan orang lain).

Berhati-hatilah karena jika Anda tidak menginstal mocha, perintah ini akan secara otomatis mengambil dan menggunakan versi terbaru, yang bagus untuk beberapa alat (seperti scaffolder misalnya), tetapi mungkin bukan yang paling direkomendasikan untuk dependensi tertentu di mana Anda mungkin ingin melakukannya. pin ke versi tertentu.

Anda dapat membaca lebih lanjut tentang npx di sini


Sekarang, jika alih-alih memanggil mocha secara langsung, Anda ingin menentukan skrip npm kustom, alias yang mungkin memanggil biner npm lainnya ...

Anda tidak ingin tes perpustakaan Anda gagal bergantung pada penyiapan mesin (mocha sebagai global, versi mocha global, dll), cara menggunakan mocha lokal yang bekerja lintas platform adalah:

node node_modules/.bin/mocha

npm menempatkan alias ke semua binari di dependensi Anda pada folder khusus itu. Terakhir, npm akan menambahkan node_modules / .bin ke PATH secara otomatis saat menjalankan skrip npm, jadi di package.json Anda dapat melakukan:

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

dan memohon dengan

npm test
Benja
sumber
1
+1, Saya telah menggunakan moka sejak beberapa waktu yang lalu, tetapi saya tidak menyadarinya. Ini harus menjadi jawaban yang diterima!
gihanchanuka
6
@ michael.kebe no, Anda tidak perlu menentukan path tersebut untuk menggunakan mocha lokal, npm sudah menambahkan "./node_modules/.bin" ke $ PATH, jadi ini akan menggunakan versi lokal secara default.
Benja
Saya percaya bahwa perintahnya harus node node_modules / mocha / bin / mocha bukan node node_modules / .bin / mocha
Mina Luke
3
@MinaLuke yang berfungsi juga tetapi itu ide yang buruk, /node_modules/.bin/{module-binary-name}adalah tempat npm menempatkan pintasan ke biner dalam dependensi Anda, Anda tidak boleh merujuk secara langsung file di sumber dependensi, karena itu mungkin rusak pada versi berikutnya.
Benja
1
@DougBarbieri tangkapan yang bagus, ini jawaban lama, saya akan memperbarui untuk menyebutkan npx, terima kasih!
Benja
18

Setelah membaca lebih lanjut, dan konfirmasi dari Linus G Thiel di atas, saya merasa bahwa saya harus,

  • Downgrade ke Node.js 0.6.12
  • Dan lainnya,
    • Instal Mocha sebagai global
    • Tambahkan ./node_modules/.binke sayaPATH
Stephen Melrose
sumber
4
Saya memiliki node 0.8.12 dan mocha yang diinstal secara global dan lokal (untuk proyek yang berbeda), dan mereka berfungsi. Jadi tidak perlu downgrade node. Untuk mocha yang diinstal secara lokal, cukup pastikan PATH Anda disetel seperti di atas, atau panggil langsung dari skrip Anda (Makefile atau tag "skrip").
Qichao Dong
1
Saya telah menginstal Mocha secara lokal dan global tetapi tidak ditemukan di jalur (Win8). Saya harus secara manual menambahkan folder './node_modules/.bin' relatif terhadap proyek saya ke PATH saya, restart konsol kemudian mengetik 'mocha' akan berfungsi. Tidak ideal, tetapi peretasan cepat untuk membuatnya berfungsi. Mungkin jika Anda memiliki lokasi tingkat atas untuk menginstal mocha secara lokal, tautkan ke PATH tersebut sehingga Anda dapat menggunakannya di tempat lain.
Ali
1

Untuk windows:

Package.json

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

lalu jalankan perintahnya

npm run test
Ashutosh Jha
sumber
1

Saat memasang modul node untuk mocha saya telah mencoba perintah di bawah ini

  • npm install
  • npm instal mocha
  • npm install --save-dev mocha
  • npm install mocha -g # untuk menginstalnya juga secara global

dan saat menjalankan atau menjalankan uji moka saya mencoba

  • tes moka
  • npm run test
  • uji mocha test \ index.test.js
  • tes npm

tetapi saya mendapatkan kesalahan di bawah ini sebagai:

'Mocha' tidak dikenali sebagai perintah internal atau eksternal

Jadi, setelah mencoba semuanya, ternyata hanya mengatur jalur ke variabel lingkungan di bawah Variabel Sistem sebagai:

C: \ Program Files \ nodejs \

dan itu berhasil :)

DHEERAJ
sumber