web-dev-qa-db-ja.com

単体テストと統合テストの分離

完全なモックユニットテストと、一部の非同期操作が正しく返されるかどうかをチェックする統合テストを作成することに興味があります。 unitテスト用に1つのコマンドとintegrationテスト用に1つのコマンドが欲しいので、CIツールで別々に実行できます。これを行うための最良の方法は何ですか?モカやジェストのようなツールは、物事を行う1つの方法にのみ焦点を当てているようです。

私が見る唯一のオプションは、mochaを使用し、ディレクトリに2つのフォルダを置くことです。

何かのようなもの:

  • __unit__
  • __integration__

次に、mochaにsrcディレクトリ内のすべての__unit__テストを実行するように指示する方法と、すべての__integration__テストを実行するように指示する別の方法が必要です。

考え?

19
ThomasReggi

Mochaは、ディレクトリ、ファイルグロブ、およびテスト名 grepping をサポートしており、テストの「グループ」を作成するために使用できます。

ディレクトリ

test/unit/whatever_spec.js
test/int/whatever_spec.js

次に、ディレクトリ内のすべてのjsファイルに対してテストを実行します。

mocha test/unit
mocha test/int
mocha test/unit test/int

ファイルプレフィックス

test/unit_whatever_spec.js
test/int_whatever_spec.js

次に、特定のファイルに対してmochaを実行します。

mocha test/unit_*_spec.js
mocha test/int_*_spec.js
mocha

テスト名

テストタイプとクラス/サブジェクトを説明する外部ブロックをmochaで作成します。

describe('Unit::Whatever', function(){})

describe('Integration::Whatever', function(){})

次に、mochas "grep"引数を指定して名前付きブロックを実行します-g

mocha -g ^Unit::
mocha -g ^Integration::
mocha

テスト名を使用するときは、ファイルまたはディレクトリを分離しておくと、失敗したテストのソースファイルを簡単に区別できるので便利です。

package.json

各テストコマンドをpackage.jsonscriptsセクションに保存して、yarn test:intnpm run test:intなどで簡単に実行できるようにします。

{
  scripts: {
    "test": "mocha test/unit test/int",
    "test:unit": "mocha test/unit",
    "test:int": "mocha test/int"
  }
}
38
Matt