Mochaで単一のテストを実行するには?


292

私はJavaScriptのテストにMochaを使用しています。テストファイルには5つのテストが含まれています。ファイル内のすべてのテストではなく、特定のテスト(または一連のテスト)を実行することは可能ですか?

回答:


355

モカの--grepオプションを使ってみてください:

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

有効なJavaScript正規表現をとして使用できます<pattern>。たとえば、次の場合test/mytest.js

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

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

次に:

$ mocha -g 'logs a'

単一のテストを実行します。これは、すべての名前describe(name, fn)it(name, fn)呼び出しを横切ることに注意してください。

describe()特定のセットを簡単に見つけて選択できるようにするには、名前空間にネストされた呼び出しを使用することを検討してください。


1
ありがとう!タグ--grepからのみフィルターをかけているような印象を受けました@
クマーハーシュ2014年

5
プログラムで(たとえば、Gruntから)Mochaを使用する場合、問題があります。grepオプションは´RegExp() ´オブジェクトである必要があります。文字列の場合はエスケープされます。
h-kippo 2014年

1
これは私のために働いた唯一の解決策です。コマンドライン(mocha some/test.js)でファイルを指定しても、まったく機能しませんでした。ありがとう!
hraban 2018

2
サブストリングlogs a bcdを含む実行も回避する方法はありlogs aますか?正規表現は、^$0.10.2に取り組んでいません。
Ciro Santilli郝海东冠状病六四事件法轮功

ありがとう。mocha-g 'logs a'としてディレクトリを指定しないと、エラーが発生します。
kta

166

使用パターンによっては、のみを使用することもできます。TDDスタイルを使用します。次のようになります。

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

このテストのみがすべてのファイル/スイートから実行されます。


5
BDDも同じように機能します。これは、単一のテストで作業している場合に最適です。スイート/説明レベルでも使用できます
andyzinsser

14
chaiを使用すると、構文が期待されますit.only
elkelk 2016

4
それはまた、作業モカは内部カルマなどから使用されますので、このときの答えは優れている
のVivek Kodira

2
it.onlymocha-testdataと一緒にgivenは機能しません。そして、後でそれを削除することを忘れがちです。
Tr1et 2017年

4
eslint-plugin-mochano-exclusive-testsあなたが削除するのを忘れた場合、あなたを捕まえるルールがあります.only
dostu

84

npm test(package.jsonスクリプトを使用して)使用している場合は、エキストラ--を使用してパラメーターをmochaに渡します

例えば npm test -- --grep "my second test"

編集:(--grepおそらく他の引数によっては)少しうるさいように見えます。あなたはできる:

package.jsonを変更します。

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

または--bail、それほど煩わしくないように見えるものを使用する

npm test -- --bail

3
私のために働いた。おかげで:)
ジル・ジェンヴィ

1
@Andy --grep は少しうるさい場合があります-npm スクリプトエントリ内のモカの直後に置いてみてください。それ以外の場合npm test -- --bailは、最初の失敗したテストの後のベイル処理に役立ちます
アシュリークールマン2017年

1
--grep私の日を救う前に余分なダッシュを渡します!どうもありがとう。PS。私はWindows上で実行していますnpm test -- --grep @tag
Mykola

18

ファイル名で単一のテストを実行する

実際、もしあなたがmocha.optsからglobパターン(例えば)を削除するなら、ファイル名で(単に `` it()-string-grepping``だけでなく)単一のモカテストを実行することもでき./test/**/*.spec.jsます。

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

これが私のmocha.single.optsです(前述のglob行がないことだけが異なります)。

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

背景: opts-File(で始まる--)からさまざまなスイッチをオーバーライドできますが、globをオーバーライドすることはできません。そのリンクにもいくつかの説明があります。

ヒント:場合node_modules/.bin/mocha混乱あなたは、ローカルパッケージモカを使用します。mochaグローバルにインストールしている場合は、単にと書くこともできます。


そして、あなたが快適さを望むならpackage.json:それでも:**/*-ish globをから削除し、mocha.optsここに挿入してください、すべてのテストのために、それらを単一のテストのために残してください:

"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",

使用法:

> npm run test

それぞれ

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

(気に--!)


:$ 1は私のセットアップで必要とされなかった、その代わり、それはのような警告につながる Warning: Could not find any test files matching pattern: $1
Merijnフォーゲル

15

'describe'、 'it'、または 'context'の前に.onlyを使用するだけです。「$ npm run test:unit」を使用して実行すると、.onlyのユニットのみが実行されます。

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

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

11

こんにちは上記の解決策は私のために機能しませんでした。単一のテストを実行するもう1つの方法は、

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

これは、単一のファイルから特定の名前でテストケースを実行するのに役立ちます。


1
十分に選択的な式を使用してください-g。ファイル名を指定する必要はありません。十分に選択的な式を記述できない場合は、テストに適切な名前を付けていないことを意味します。
Louis


8

「it.only」を試すことができます

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

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

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

これで最初のものだけが実行されます


2
テストが--forbid-onlyCI /ビルドサーバー経由で実行されない場合、危険です。.onlymainブランチに忍び込み、他のテストが実行されなくなるため、他のテストをミュートにする傾向があります。さまざまなテストを実行するためにコードを変更するワークフローを反機能と考えるようになりました。テストランナーは、開発者ではなく、実行するテスト(別名タグ付きテスト)を決定する必要があります。
k0pernikus

私はこれを私のローカルで1つの機能をテストするために使用しました。注:it.onlyリポジトリへのコードをコミットしないでください
Bikesh M


0

npm testを使用しているときにgrepメソッドが機能しない理由がわかりません。これは機能します。また、何らかの理由でテストフォルダも指定する必要があります。

npmテスト-test / sometest.js


0

すべてのテストを1つのtest.jsファイルに統合し、パッケージのjsonスクリプトを次のように追加します。

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

テストディレクトリでコマンドを入力します。

npm run api:test
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.