Bagaimana cara menjalankan tes tunggal dengan Mocha?


292

Saya menggunakan Mocha untuk menguji hal-hal JavaScript saya. File pengujian saya berisi 5 tes. Apakah itu mungkin untuk menjalankan tes tertentu (atau serangkaian tes) daripada semua tes dalam file?

Jawaban:


355

Coba gunakan opsi moka--grep :

    -g, --grep <pattern>            only run tests matching <pattern>

Anda dapat menggunakan regex JavaScript yang valid sebagai <pattern>. Misalnya, jika kita memiliki test/mytest.js:

it('logs a', function(done) {
  console.log('a');
  done();
});

it('logs b', function(done) {
  console.log('b');
  done();
});

Kemudian:

$ mocha -g 'logs a'

Untuk menjalankan tes tunggal. Perhatikan bahwa ini mencakup semua nama describe(name, fn)dan it(name, fn)doa.

Pertimbangkan untuk menggunakan describe()panggilan bersarang untuk namespacing agar mudah menemukan dan memilih set tertentu.


1
Terima kasih! Saya mendapat kesan bahwa --grephanya disaring dari @tag.
kumarharsh

5
Saat menggunakan Mocha secara terprogram (misalnya dari Grunt), ada tangkapan: opsi grep harus berupa objek ´RegExp () ´. Jika sebuah string, itu akan lolos.
h-kippo

1
ini adalah satu-satunya solusi yang berhasil untuk saya. menentukan file pada baris perintah ( mocha some/test.js) tidak berfungsi sama sekali. Terima kasih!
hraban

2
Adakah cara untuk menghindari juga menjalankan logs a bcdyang berisi logs asubstring? Regexp ^$tidak berfungsi pada 0.10.2.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Terima kasih. Saya mendapatkan beberapa kesalahan jika saya tidak menentukan direktori sebagai mocha -g 'log a'.
kta

166

Tergantung pada pola penggunaan Anda, Anda mungkin hanya ingin menggunakan saja . Kami menggunakan gaya TDD; terlihat seperti ini:

test.only('Date part of valid Partition Key', function (done) {
    //...
}

Hanya tes ini yang akan berjalan dari semua file / suite.


5
BDD bekerja sama. Ini bagus untuk saat Anda mengerjakan satu tes. Ini juga dapat digunakan di tingkat suite / deskripsikan
andyzinsser

14
Dengan chai dan harapkan sintaksnya it.only.
elkelk

4
Jawaban ini lebih baik karena ini juga akan berfungsi ketika moka digunakan dari dalam karma, dll.
Vivek Kodira

2
it.onlytidak akan bekerja sama dengan givendari mocha-testdata . Dan mudah untuk menghapusnya nanti.
Tr1et

4
eslint-plugin-mochamemiliki aturan no-exclusive-testsyang akan menangkap Anda jika Anda lupa untuk menghapus .only.
dostu

84

Jika Anda menggunakan npm test(menggunakan skrip package.json) gunakan ekstra --untuk meneruskan param ke moka

misalnya npm test -- --grep "my second test"

EDIT : Sepertinya --grepbisa sedikit cerewet (mungkin tergantung pada argumen lain). Kamu bisa:

Ubah package.json:

"test:mocha": "mocha --grep \"<DealsList />\" .",

Atau gunakan alternatif --bailyang tampaknya kurang rewel

npm test -- --bail

3
Bekerja untukku. Terima kasih :)
Jill-Jênn Vie

1
@Andy --grep bisa sedikit cerewet - coba letakkan tepat setelah mocha dalam entri skrip npm. Lain npm test -- --bailberguna untuk membayar setelah tes gagal pertama
Ashley Coolman

1
melewati tanda hubung ekstra sebelum --grepmenyelamatkan hariku! Terima kasih banyak. PS. Saya menggunakan Windows, menjalankannpm test -- --grep @tag
Mykola

18

jalankan uji tunggal –dengan nama file–

Sebenarnya, seseorang juga dapat menjalankan tes mocha tunggal dengan nama file (bukan hanya dengan "it () - string-grepping") jika Anda menghapus pola glob (mis. ./test/**/*.spec.js) Dari mocha.opts Anda, masing-masing membuat salinan, tanpa:

node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js

Inilah mocha.single.opts saya (hanya berbeda dengan melewatkan garis gumpalan yang disebutkan di atas)

--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive

Latar Belakang: Meskipun Anda dapat mengganti berbagai sakelar dari File-opts (dimulai dengan --), Anda tidak dapat mengabaikan glob . Tautan itu juga memiliki beberapa penjelasan.

Petunjuk: jika node_modules/.bin/mochamembingungkan Anda, untuk menggunakan paket moka lokal. Anda juga dapat menulis adil mocha, jika Anda menginstalnya secara global.


Dan jika Anda menginginkan kenyamanan package.json: Masih: menghapus **/*gumpalan -ish dari Anda mocha.opts, masukkan di sini, untuk semua pengujian, tinggalkan mereka untuk pengujian tunggal:

"test": "mocha ./test/**/*.spec.js",
"test-watch": "mocha -R list -w ./test/**/*.spec.js",
"test-single": "mocha $1",
"test-single-watch": "mocha -R list -w $1",

pemakaian:

> npm run test

masing-masing

> npm run test-single -- test/ES6.self-test.spec.js 

(pikirkan --!)


$ 1 tidak diperlukan dalam pengaturan saya, sebagai gantinya, itu mengarah pada peringatan seperti: Warning: Could not find any test files matching pattern: $1
Merijn Vogel

15

Cukup gunakan .hanya sebelum 'menggambarkan', 'itu' atau 'konteks'. Saya menjalankan menggunakan "$ npm run test: unit", dan hanya menjalankan unit dengan .on saja.

describe.only('get success', function() {
 // ...
});

it.only('should return 1', function() {
  // ...
});

11

Hai solusi di atas tidak berhasil untuk saya. Cara lain menjalankan tes tunggal adalah

mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'

Ini membantu menjalankan test case dari satu file dan dengan nama tertentu.


1
Gunakan ekspresi yang cukup selektif untuk -gdan Anda tidak perlu menentukan nama file. Jika Anda tidak dapat menulis ekspresi yang cukup selektif, itu artinya Anda tidak memberi nama pengujian dengan benar.
Louis

10
npm test <filepath>

misalnya:

npm test test/api/controllers/test.js

di sini 'test / api / controllers / test.js' adalah filepath.


8

Anda dapat mencoba "hanya"

 it.only('Test one ', () => {

            expect(x).to.equal(y);
        });
it('Test two ', () => {

            expect(x).to.equal(y);
        });

dalam hal ini yang pertama hanya akan dieksekusi


2
Berbahaya jika pengujian tidak dilakukan melalui --forbid-onlypada CI / server build. .onlymemiliki kecenderungan untuk menyelinap ke cabang utama dan membuat tes lainnya bisu karena mereka tidak akan melakukan lagi. Saya jadi berpikir tentang alur kerja mengubah kode untuk menjalankan tes yang berbeda anti-fitur. Pelari uji harus menentukan tes mana yang harus dieksekusi (tes yang ditandai) bukan pengembang.
k0pernikus

Saya telah menggunakan ini untuk menguji satu fungsi di lokal saya, Catatan: jangan komit kode dengan it.onlyuntuk repo
Bikesh M


0

Tidak yakin mengapa metode grep tidak berfungsi untuk saya saat menggunakan tes npm. Tapi ini berhasil. Saya juga perlu menentukan folder tes juga untuk beberapa alasan.

npm test - test / sometest.js


0

Konsolidasi semua tes Anda dalam satu file test.js & paket Anda json tambahkan skrip sebagai:

  "scripts": {
  "api:test": "node_modules/.bin/mocha --timeout 10000 --recursive api_test/"
},

Ketikkan perintah pada direktori pengujian Anda:

npm run api:test
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.