モカのテストディレクトリを指定するにはどうすればよいですか?


219

Mochatestデフォルトでテストファイルを見つけようとしますが、別のディレクトリを指定するにはどうすればよいserver-testですか。


あなたの質問に対する100%の答えではありませんが、jaketrent.com / post / run - single - mocha - testをチェックしてください -特定のテストスイートを実行する方法を探してここに来ました、これはあなたがどのテストを使用.only.skipて管理できるかを示しています走っている。特定の機能の開発中に、テストスイート全体が常に実行されるのを待ちたくない場合に重要です。
デイブサグ2014

回答:


141

編集:このオプションは廃止されました:https : //mochajs.org/#mochaopts


mochaコマンドラインで実行するだけでそれを実行したい./server-tests./test、の代わりにフォルダーでテストを実行したい場合./test/mocha.optsは、ファイル内にこれだけでファイルを作成します。

server-tests

そのフォルダとサブディレクトリのすべてを実行したい場合は、これを test/mocha.opts

server-tests
--recursive

mocha.opts コマンドラインを介して渡される引数なので、最初の行をテストを変更したいディレクトリだけにすると、リダイレクトされます ./test/


12
これは、少なくとも摩擦でオプションであり、かつ受け入れ答えの私見でなければなりません
ニック・トムリン

私はボイラープレートの1つを使用しており、次の行でそれを使用しています。ウィンドウが原因である可能性があります。一度確認してください。node./node_modules/mocha/bin/mocha $(find api -name '* -test.js') --compilers js:babel-core / register
神戸

1
宝石もWebstorm IDEのモカデバッグ構成でうまく機能し、「ファイルパターン」を選択して入力を空のままにしておくと、mocha.optsを使用します
danday74

3
それは確かに最良の答えです。おそらくまたことをあなたの答えに追加する価値があるだろうmocha.optsファイルは、あなたがしたい場所に置き、その後、簡単に実行することができますmocha例えばを通じて、設定ファイルへのパスを指定:mocha --opts ./mocha.opts
quirimmo

1
また、mochaコマンドラインに--recursiveを追加することもできます。これは、package.jsonでテストスクリプトを定義する場合に便利です
unludo

282

これを使って:

mocha server-test

または、サブディレクトリがある場合はこれを使用します。

mocha "server-test/**/*.js"

二重引用符の使用に注意してください。それらを省略すると、サブディレクトリでテストを実行できない場合があります。


1
これは私にはうまくいきません。私がこのようにしたい場合は、私がしなければなりませんmocha test/server-test
jonnie

22
二重引用符の問題は何年もの間私にありました!私の正気を救ってくれてありがとう。この二重引用符に特に注意を払うには、これを読んでいるすべての人に叫んでください。
ctrlplusb 2015年

11
私の場合、私は使用していましたmocha ./**/*.test.js(テストファイルをモジュールファイルと同じ場所に配置できるようにするため)。他のテストとはファイル階層の別のレベルにテストファイルを追加すると、パターンが機能しなくなり、階層内の同じレベルにある他のダースボールファイルが1つだけ見つかり、他のファイルは見つかりませんでした。引用符で囲むと修正されました。
Stoutie 2015年

1
または、--recursive以下で説明するように使用する
ジェフディッキー

4
これが答えになるはずです!二重引用符は私を救う
Minh Thai

81

ここに1つの方法があります。テストフォルダーにサブフォルダーがある場合などです。

/test
/test/server-test
/test/other-test

Linuxでは、findコマンドを使用してすべての* .jsファイルを再帰的にリストし、それをmochaに渡すことができます。

mocha $(find test -name '*.js')

29
または、--recursive以下で説明するように使用する
ジェフディッキー

5
つまり、言い換えるとmocha、configで目的のディレクトリ構造を設定するオプションがないということです。
Green

client user $ mocha $(find tests -name '* .js')-bash:mocha:command not found; このエラーを取得しています。
lft93ryt 2017

1
これは複雑すぎて誤解を招きます。OSコマンドを使用するよりもモカオプションを優先します。
Michael Bushe

あなたの投稿は質問に回答しません
ekkis

30

これを行うための良い方法は、適切な引数でmochaを呼び出す "test" npmスクリプトをpackage.jsonに追加することです。このように、package.jsonはテスト構造も記述します。また、他の回答(二重引用符と単一引用符の比較、「検索」など)でこれらのクロスプラットフォームの問題をすべて回避します。

mochaに「test」ディレクトリ内のすべてのjsファイルを実行させるには:

"scripts": {
    "start": "node ./bin/www", -- not required for tests, just here for context
    "test": "mocha test/**/*.js"
  },

次に、煙のテストのみを実行するには、次を呼び出します。

npm test

この方法ですべてのプロジェクトのすべてのテストの実行を標準化できるため、新しい開発者がプロ​​ジェクトまたは別のプロジェクトを開始すると、「npm test」がテストを実行することがわかります。これには歴史的な優先順位があります(Maven、たとえば、ほとんどの古い学校の "make"プロジェクトも)。すべてのプロジェクトに同じテストコマンドがある場合、CIは確実に役立ちます。

同様に、mochaで実行する高速な「煙」テストのサブセットがある場合があります。

"scripts": {
    "test": "mocha test/**/*.js"
    "smoketest": "mocha smoketest/**/*.js"
  },

次に、煙のテストのみを実行するには、次を呼び出します。

npm smoketest

別の一般的なパターンは、テストをテストするソースと同じディレクトリにテストを配置することですが、テストファイルは* .spec.jsを呼び出します。たとえば、src / foo / foo.jsはsrc / foo / foo.spec.jsによってテストされます。

慣例により* .spec.jsという名前のすべてのテストを実行するには:

  "scripts": {
    "test": "mocha **/*.spec.js"
  },

次に、すべてのテストを実行するには、次を呼び出します。

npm test

こちらのパターンをご覧ください。良い。:)一貫性はmuraを破ります。


これは、これを行う最も正確な方法だと思います。
ArturS

29

-gまたは--grepオプションを使用しないでください。そのパターンは、ファイルシステムではなく、it()内のテストの名前で機能します。現在のドキュメントは、これに関して誤解を招くか、完全に間違っています。コマンド全体をファイルシステムの一部に制限するには、最後の引数としてパターンを渡します(フラグではありません)。

たとえば、次のコマンドはレポーターをspecに設定しますが、server-testディレクトリ内のjsファイルのみをテストします。

mocha --reporter spec server-test/*.js

このコマンドは、上記と同じことを行います。さらに、テストのit()文字列/定義が「Fnord:」で始まるテストケースのみを実行します。

mocha --reporter spec --grep "Fnord:" server-test/*.js

22

node.jsの場合、Mocha v6以降のいくつかの新しい構成:

オプション1:.mocharc.jsonプロジェクトのルートディレクトリに作成:

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

オプション2:mochaプロジェクトのプロパティを追加するpackage.json

{
  ...

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

その他のオプションはこちらです。


20

test_directory一致するサブディレクトリを含むすべてのファイルを実行しますtest.js

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

または--recursiveスイッチを使用する

mocha --recursive test_directory/

11

私は今この問題を抱えていて、--recursive(私が設定した)オプションを削除し、上記で提案された同じ構造を使用することで解決しました:

mochify "test/unit/**/*.js"

これは/test/unit/、私の下にあるすべてのディレクトリですべてのテストを実行し、内部の他のディレクトリを無視しました/test/


9

今では(2020年)モカ構成ファイルを使用してこれを処理できます

ステップ1:ルートの場所に.mocharc.jsファイルを作成するアプリケーションのにする

ステップ2:以下のコードをmocha構成ファイルに追加します。

'use strict';

module.exports = {
  spec: 'src/app/**/*.test.js'
};

設定ファイルのその他のオプションについては、このリンクを参照してください:https : //github.com/mochajs/mocha/blob/master/example/config/.mocharc.js


3

node.js v0.10.0、mocha v1.8.2、npm v1.2.14を使用しているWindows 7を使用しています。私はモカにパステスト/ユニットを使用してテストを見つけさせようとしていただけでした。

「test / unit / *。js」オプションを使用しても、Windowsでは機能しません。Windowsシェルがunixenのようなワイルドカードを展開しないという正当な理由があります。

ただし、「test / unit」を使用すると、ファイルパターンがなくても機能します。例えば。「mocha test / unit」は、test / unitフォルダーにあるすべてのファイルを実行します。

これはまだテストとして1つのフォルダーファイルのみを実行しますが、パラメーターとして複数のディレクトリ名を渡すことができます。

また、単一のテストファイルを実行するには、完全パスとファイル名を指定できます。例えば。「mocha test / unit / mytest1.js」

私は実際にnpm "scripts":{"test": "mocha test / unit"}のpackage.jsonで設定しました、

そのため、「npm test」はユニットテストを実行します。


11
今日の時点で、1は使用することができ--recursive、次のようなオプションを:mocha --recursive "some_dir"
superjos

3
使用してnode_modules\.bin\mocha "test\unit\*.js"Windows上で作品を。またnode_modules\.bin\mocha "**\*.js"動作します(私の実際のケース)。しかし、node_modulesディレクトリを除外する方法を探しています。(私もgulpfile.jsを使用していますが、モカで直接テストを起動する必要がある場合があります)
Alex 75

3

あなたが使用している場合はnodejs、あなたの中package.jsonの下scripts

  1. 以下のためのglobal (-g)インストール:"test": "mocha server-test"または"test": "mocha server-test/**/*.js"サブ文書について
  2. 以下のためのprojectインストール:"test": "node_modules/mocha/bin/mocha server-test"または"test": "node_modules/mocha/bin/mocha server-test/**/*.js"サブ文書について

次に、通常どおりにテストを実行します npm test


npm run mocha "./test/*.spec.js!(~)"グロブ引数を無視することがわかりましたが、無視node_modules/.bin/mocha "./test/*.spec.js!(~)"しません。
鉄鶏

"npm run"の使用から引数を渡す@ironchicken-次のようにnpm run mocha -- yourArgs
Pedro A

3

コメントで@superjosが述べたように、

mocha --recursive "some_dir"


2

これは、テストディレクトリを変更するための「簡単な」サポートではないようです。
ただし、質問に関連して、この問題を確認する必要があるかもしれません。


2

@ jeff-dickeyが示唆するように、プロジェクトのルートにというフォルダーを作成しますtest。そのフォルダーに、次のファイルを作成します。mocha.opts。私がジェフの答えを改善しようとすると、1つのテストフォルダーの名前を指定する代わりに、次の行を追加して、プロジェクトで実行するすべてのテストを見つけるためのパターンを指定しました。

*/tests/*.js --recursivemocha.opts

代わりに、テストを検索する正確なフォルダーを指定する場合は、次のようにしました。

shared/tests/*.js --recursive
server/tests/graph/*.js --recursive

これが他の答えが提供するものよりも多くを必要とする人を助けることを願っています

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