Jawaban:
Sunting: Opsi ini sudah usang: https://mochajs.org/#mochaopts
Jika Anda ingin melakukannya dengan tetap berjalan mocha
di command line, tetapi ingin menjalankan tes di folder./server-tests
alih-alih ./test
, buat file ./test/mocha.opts
dengan hanya ini di file:
server-tests
Jika Anda ingin menjalankan semua yang ada di folder dan subdirektori itu, masukkan ini ke dalam test/mocha.opts
server-tests
--recursive
mocha.opts
adalah argumen yang diteruskan melalui baris perintah, jadi membuat baris pertama hanya direktori yang ingin Anda ubah tesnya juga akan dialihkan dari ./test/
mocha.opts
file dapat ditempatkan di mana pun Anda inginkan, dan kemudian jalankan eksekusi dengan mocha
menentukan path ke file mocha --opts ./mocha.opts
Gunakan ini:
mocha server-test
Atau jika Anda memiliki subdirektori, gunakan ini:
mocha "server-test/**/*.js"
Perhatikan penggunaan tanda kutip ganda. Jika Anda menghilangkannya, Anda mungkin tidak dapat menjalankan tes di subdirektori.
mocha test/server-test
mocha ./**/*.test.js
(jadi saya bisa menempatkan file uji dengan file modul). Pola berhenti bekerja untuk saya ketika saya menambahkan file uji pada tingkat yang berbeda dalam hierarki file daripada sisa tes, dan hanya akan menemukan bahwa satu file bola ganjil dan bukan selusin lainnya yang hidup pada tingkat yang sama dalam hierarki . Membungkus tanda kutip memperbaikinya.
--recursive
seperti yang saya jelaskan di bawah ini
Ini salah satu caranya, jika Anda memiliki subfolder di folder pengujian Anda, mis
/test
/test/server-test
/test/other-test
Kemudian di linux Anda dapat menggunakan perintah find untuk mendaftar semua file * .js secara rekursif dan meneruskannya ke moka:
mocha $(find test -name '*.js')
--recursive
seperti yang saya jelaskan di bawah ini
mocha
tidak memiliki opsi untuk mengatur struktur direktori yang diinginkan dalam konfigurasi?
Cara yang bagus untuk melakukan ini adalah menambahkan skrip npm "test" di package.json yang memanggil mocha dengan argumen yang benar. Dengan cara ini package.json Anda juga menjelaskan struktur pengujian Anda. Itu juga menghindari semua masalah lintas platform ini di jawaban lain (kutip ganda vs tunggal, "temukan", dll.)
Agar mocha menjalankan semua file js di direktori "test":
"scripts": {
"start": "node ./bin/www", -- not required for tests, just here for context
"test": "mocha test/**/*.js"
},
Maka untuk menjalankan hanya panggilan tes asap:
npm test
Anda dapat membakukan jalannya semua tes di semua proyek dengan cara ini, jadi ketika pengembang baru memulai proyek Anda atau yang lain, mereka tahu "uji npm" akan menjalankan tes. Ada presedensi historis yang baik untuk ini (Maven, misalnya, sebagian besar sekolah tua "membuat" proyek juga). Itu pasti membantu CI ketika semua proyek memiliki perintah pengujian yang sama.
Demikian pula, Anda mungkin memiliki subset tes "asap" yang lebih cepat yang mungkin ingin Anda jalankan:
"scripts": {
"test": "mocha test/**/*.js"
"smoketest": "mocha smoketest/**/*.js"
},
Maka untuk menjalankan hanya panggilan tes asap:
npm smoketest
Pola umum lainnya adalah menempatkan tes Anda di direktori yang sama dengan sumber yang mereka uji, tetapi panggil file tes * .spec.js. Sebagai contoh: src / foo / foo.js diuji oleh src / foo / foo.spec.js.
Untuk menjalankan semua tes bernama * .spec.js dengan konvensi:
"scripts": {
"test": "mocha **/*.spec.js"
},
Kemudian untuk menjalankan semua tes panggilan:
npm test
Lihat polanya di sini? Baik. :) Konsistensi mengalahkan mura .
Jangan gunakan opsi -g atau --grep, pola itu beroperasi atas nama tes di dalamnya (), bukan pada sistem file. Dokumentasi saat ini menyesatkan dan / atau salah mengenai hal ini. Untuk membatasi seluruh perintah ke bagian dari sistem file, Anda bisa meneruskan sebuah pola sebagai argumen terakhir (ini bukan flag).
Sebagai contoh, perintah ini akan mengatur reporter Anda untuk spec tetapi hanya akan menguji file js segera di dalam direktori server-test:
mocha --reporter spec server-test/*.js
Perintah ini akan melakukan hal yang sama seperti di atas, ditambah lagi hanya akan menjalankan kasus uji di mana string () / definisi tes dimulai dengan "Fnord:":
mocha --reporter spec --grep "Fnord:" server-test/*.js
Jika di node.js , beberapa konfigurasi baru seperti Mocha v6 :
Opsi 1: Buat .mocharc.json
di direktori root proyek:
{
"spec": "path/to/test/files"
}
Opsi 2: tambahkan mocha
properti di proyek package.json
:
{
...
"mocha": {
"spec": "path/to/test/files"
}
}
Opsi lainnya ada di sini .
Jalankan semua file test_directory
termasuk sub direktori yang cocoktest.js
find ./parent_test_directory -name '*test.js' | xargs mocha -R spec
atau gunakan --recursive
sakelar
mocha --recursive test_directory/
Saya punya masalah ini sekarang dan menyelesaikannya dengan menghapus --recursive
opsi (yang telah saya atur) dan menggunakan struktur yang sama seperti yang disarankan di atas:
mochify "test/unit/**/*.js"
Ini menjalankan semua tes di semua direktori di bawah /test/unit/
untuk saya sambil mengabaikan direktori lain di dalamnya/test/
Sekarang suatu hari (tahun 2020) Anda dapat menangani ini menggunakan file konfigurasi moka :
Langkah 1: Buat file .mocharc.js di lokasi root aplikasi Anda
Langkah 2: Tambahkan kode di bawah ini dalam file konfigurasi mocha:
'use strict';
module.exports = {
spec: 'src/app/**/*.test.js'
};
Untuk opsi Lebih lanjut dalam file konfigurasi lihat tautan ini: https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js
Saya di Windows 7 menggunakan node.js v0.10.0 dan mocha v1.8.2 dan npm v1.2.14. Saya hanya mencoba untuk mendapatkan moka menggunakan jalur tes / unit untuk menemukan tes saya, Setelah menghabiskan waktu lama dan mencoba beberapa hal yang saya mendarat,
Menggunakan opsi "test / unit / *. Js" tidak berfungsi di windows. Untuk alasan yang baik bahwa shell windows tidak memperluas wildcard seperti unixen.
Namun menggunakan "test / unit" tidak berfungsi, tanpa pola file. misalnya. "mocha test / unit" menjalankan semua file yang ditemukan di folder test / unit.
Ini hanya masih menjalankan satu file folder sebagai tes tetapi Anda dapat melewati beberapa nama direktori sebagai parameter.
Juga untuk menjalankan file uji tunggal, Anda dapat menentukan path lengkap dan nama file. misalnya. "Tes mocha / unit / mytest1.js"
Saya sebenarnya setup di package.json untuk npm "scripts": {"test": "mocha test / unit"},
Jadi 'tes npm' menjalankan tes unit saya.
--recursive
opsi seperti berikut:mocha --recursive "some_dir"
node_modules\.bin\mocha "test\unit\*.js"
karya pada Windows. Juga node_modules\.bin\mocha "**\*.js"
berfungsi (kasus saya yang sebenarnya). Tapi saya sedang mencari cara untuk mengecualikan direktori node_modules . (Saya menggunakan gulpfile.js juga, tetapi kadang-kadang saya perlu meluncurkan tes langsung dengan moka)
Jika Anda menggunakan nodejs
, di package.json
bawah Andascripts
global (-g)
instalasi: "test": "mocha server-test"
atau "test": "mocha server-test/**/*.js"
untuk sub dokumenproject
instalasi: "test": "node_modules/mocha/bin/mocha server-test"
atau "test": "node_modules/mocha/bin/mocha server-test/**/*.js"
untuk sub dokumenKemudian jalankan tes Anda seperti biasa npm test
npm run mocha "./test/*.spec.js!(~)"
mengabaikan argumen glob, tetapi node_modules/.bin/mocha "./test/*.spec.js!(~)"
tidak.
npm run mocha -- yourArgs
Tampaknya ini bukan dukungan "mudah" untuk mengubah direktori pengujian.
Namun, mungkin Anda harus melihat masalah ini , relatif terhadap pertanyaan Anda.
Seperti yang disarankan @ jeff-dickey, di root proyek Anda, buat folder bernama test
. Di folder itu, buat file bernama mocha.opts
. Sekarang ketika saya mencoba untuk memperbaiki jawaban Jeff, apa yang berhasil bagi saya alih-alih menentukan nama hanya satu folder tes, saya menentukan pola untuk menemukan semua tes untuk dijalankan dalam proyek saya dengan menambahkan baris ini:
*/tests/*.js --recursive
di mocha.opts
Jika Anda ingin menentukan folder yang tepat untuk mencari tes, saya melakukan sesuatu seperti ini:
shared/tests/*.js --recursive
server/tests/graph/*.js --recursive
Saya harap ini membantu siapa saja yang membutuhkan lebih dari apa yang diberikan jawaban lain
.only
dan.skip
mengelola tes yang Anda gunakan berlari. Penting selama pengembangan fitur tertentu ketika Anda tidak ingin menunggu seluruh rangkaian uji dijalankan sepanjang waktu.