web-dev-qa-db-ja.com

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

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

239
Misha Moroshko

mochaの--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()呼び出しを使用することを検討してください。

300
Ashe

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

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

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

143
J Burnett

__package_jsonスクリプトを使用してnpm testを使用している場合は、余分な--を使用して、パラメーターをmochaに渡します

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

EDIT--grepは少々面倒に見えるかもしれません(おそらく他の引数に依存します)。あなたはできる:

Package.jsonを変更します。

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

または、代わりに--bailを使用してください。

npm test -- --bail
64
Ashley Coolman

ファイル名による単一テストの実行

実際、mocha.optsからそれぞれglobパターン(./test/**/*.spec.jsなど)を削除する場合、単一のmochaテストby by filename(「it()-string-grepping」だけでなく)を実行することもできます。なしでコピーを作成します:

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

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

Hint:ローカルパッケージmochaを使用する場合、node_modules/.bin/mochaが混乱する場合。グローバルにインストールされている場合は、mochaのみを記述することもできます。


そして、package.jsonの快適さを望む場合:それでも:**/*- ishグロブを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 

--に注意してください!)

10
Frank Nocke

こんにちは上記のソリューションは私のために機能しませんでした。単一のテストを実行する他の方法は

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

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

8
Ruthreshwar
npm test <filepath>

例:

npm test test/api/controllers/test.js

ここで、「test/api/controllers/test.js」はファイルパスです。

7
Jitendra Pawar

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

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

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

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

これでは、最初のもののみが実行されます

4
Bikesh M

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

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

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

https://mochajs.org/#usage を見ると、単純に

mocha test/myfile

働くでしょう。最後に「.js」を省略できます。

1
Dave

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

npm test-test/sometest.js

0
Andy

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

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

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

npm run api:test
0
Shahin