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?

Misha Moroshko
sumber

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.

Asherah
sumber
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.

J Burnett
sumber
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
Ashley Coolman
sumber
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 --!)

Frank Nocke
sumber
$ 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() {
  // ...
});
QauseenMZ
sumber
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.

Ruthreshwar
sumber
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.

Jitendra Pawar
sumber
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

Bikesh M
sumber
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
5

Melihat ke https://mochajs.org/#usage kita dapat menggunakannya

tes mocha / myfile

akan bekerja. Anda dapat menghilangkan '.js' di bagian akhir.

Dave
sumber
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

Andy N
sumber
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
Shahin
sumber