Bagaimana cara menentukan direktori tes untuk moka?

219

Mocha mencoba mencari file uji di bawah testsecara default, bagaimana cara menentukan dir lain, misalnya server-test?

Freewind
sumber
Meskipun tidak 100% jawaban untuk pertanyaan Anda, periksa jaketrent.com/post/run-single-mocha-test - saya datang ke sini mencari cara menjalankan test suite tertentu dan ini menunjukkan bahwa Anda dapat menggunakan .onlydan .skipmengelola tes yang Anda gunakan berlari. Penting selama pengembangan fitur tertentu ketika Anda tidak ingin menunggu seluruh rangkaian uji dijalankan sepanjang waktu.
Dave Sag

Jawaban:

141

Sunting: Opsi ini sudah usang: https://mochajs.org/#mochaopts


Jika Anda ingin melakukannya dengan tetap berjalan mochadi command line, tetapi ingin menjalankan tes di folder./server-tests alih-alih ./test, buat file ./test/mocha.optsdengan 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/

Jeff Dickey
sumber
12
Ini adalah opsi dengan friksi paling sedikit, dan harus menjadi jawaban yang diterima IMHO
Nick Tomlin
saya menggunakan salah satu pelat ketel dan pada baris berikut, mungkin karena windows, dapatkah Anda periksa sekali.node ./node_modules/mocha/bin/mocha $ (temukan api -name '* -test.js') --compiler js: babel-core / register
kobe
1
permata, juga bermain dengan baik dengan konfigurasi debug mocha Webstorm IDE, cukup pilih "pola file" dan biarkan input kosong, dan itu akan menggunakan mocha.opts
danday74
3
Itu pasti jawaban terbaik. Kemungkinan besar ada baiknya menambahkan jawaban Anda juga bahwa mocha.optsfile dapat ditempatkan di mana pun Anda inginkan, dan kemudian jalankan eksekusi dengan mochamenentukan path ke file mocha --opts ./mocha.opts
konfigasinya
1
Anda juga bisa saja meletakkan --recursive di baris perintah mocha, berguna jika Anda mendefinisikan skrip tes di package.json
unludo
282

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.

Behrang
sumber
1
Ini tidak berhasil untuk saya. Jika saya ingin melakukannya dengan cara ini, saya harus melakukannyamocha test/server-test
jonnie
22
Masalah kuotasi ganda sudah cukup lama bagi saya! Terima kasih telah menyelamatkan kewarasan saya. Serukan kepada semua orang yang membaca ini untuk memberi perhatian ekstra pada tanda kutip ganda itu.
ctrlplusb
11
Dalam kasus saya, saya menggunakan 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.
Stoutie
1
atau cukup gunakan --recursiveseperti yang saya jelaskan di bawah ini
Jeff Dickey
4
Ini seharusnya jawabannya! Kutipan ganda menyelamatkan saya
Minh Thai
81

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')
250R
sumber
29
atau cukup gunakan --recursiveseperti yang saya jelaskan di bawah ini
Jeff Dickey
5
Jadi dengan kata lain mochatidak memiliki opsi untuk mengatur struktur direktori yang diinginkan dalam konfigurasi?
Hijau
pengguna klien $ mocha $ (temukan tes -nama '* .js') -bash: mocha: perintah tidak ditemukan; Mendapat kesalahan ini.
lft93ryt
1
Ini terlalu rumit dan menyesatkan. Lebih suka opsi moka daripada menggunakan perintah OS.
Michael Bushe
posting Anda tidak menjawab pertanyaan
ekkis
30

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 .

Michael Bushe
sumber
Saya kira ini adalah cara paling akurat untuk melakukan ini.
ArturS
29

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
gregtczap
sumber
22

Jika di node.js , beberapa konfigurasi baru seperti Mocha v6 :

Opsi 1: Buat .mocharc.jsondi direktori root proyek:

{
  "spec": "path/to/test/files"
}

Opsi 2: tambahkan mochaproperti di proyek package.json:

{
  ...

  "mocha": {
    "spec": "path/to/test/files"
  }
}

Opsi lainnya ada di sini .

tengah lapangan
sumber
20

Jalankan semua file test_directorytermasuk sub direktori yang cocoktest.js

find ./parent_test_directory -name '*test.js' | xargs mocha -R spec

atau gunakan --recursivesakelar

mocha --recursive test_directory/
Anthony Awuley
sumber
11

Saya punya masalah ini sekarang dan menyelesaikannya dengan menghapus --recursiveopsi (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/

jfunk
sumber
9

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

rajeshchauhan23102008
sumber
3

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.

Robin Luiten
sumber
11
Sampai hari ini, orang dapat menggunakan --recursiveopsi seperti berikut:mocha --recursive "some_dir"
superjos
3
Menggunakan 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)
Alex 75
3

Jika Anda menggunakan nodejs, di package.jsonbawah Andascripts

  1. Untuk global (-g)instalasi: "test": "mocha server-test"atau "test": "mocha server-test/**/*.js"untuk sub dokumen
  2. Untuk projectinstalasi: "test": "node_modules/mocha/bin/mocha server-test"atau "test": "node_modules/mocha/bin/mocha server-test/**/*.js"untuk sub dokumen

Kemudian jalankan tes Anda seperti biasa npm test

Cozzbie
sumber
Saya menemukan bahwa npm run mocha "./test/*.spec.js!(~)"mengabaikan argumen glob, tetapi node_modules/.bin/mocha "./test/*.spec.js!(~)"tidak.
ironchicken
@ironchicken untuk meneruskan argumen dari penggunaan "npm run" - seperti dalamnpm run mocha -- yourArgs
Pedro A
3

Seperti yang disebutkan oleh @superjos dalam penggunaan komentar

mocha --recursive "some_dir"

avck
sumber
2

Tampaknya ini bukan dukungan "mudah" untuk mengubah direktori pengujian.
Namun, mungkin Anda harus melihat masalah ini , relatif terhadap pertanyaan Anda.

Pierre
sumber
2

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

lwdthe1
sumber