現在、JavaScriptの単体テストにmochaを使用しています。
いくつかのテストファイルがあり、各ファイルにはbefore
とbeforeEach
がありますが、それらはまったく同じです。
それらすべて(またはそれらの一部)にグローバルbefore
およびbeforeEach
を提供するにはどうすればよいですか?
別のファイルでbefore
またはbeforeEach
を宣言します(私はspec_helper.coffee
)それを必要とします。
spec_helper.coffee
afterEach (done) ->
async.parallel [
(cb) -> Listing.remove {}, cb
(cb) -> Server.remove {}, cb
], ->
done()
test_something.coffee
require './spec_helper'
テストフォルダーのルートで、グローバルテストヘルパーを作成しますtest/helper.js
これにはbeforeとbeforeEachがあります
// globals
global.assert = require('assert');
// setup
before();
beforeEach();
// teardown
after();
afterEach();
ルートレベルのフック
任意のファイルを選択して、「ルート」レベルのフックを追加することもできます。たとえば、すべてのdescribe()ブロックの外側にbeforeEach()を追加します。これにより、存在するファイルに関係なく、テストケースの前にbeforeEach()へのコールバックが実行されます(これは、Mochaが「ルートスイート」と呼ばれる記述されたdescribe()ブロックを持っているためです。
すべての通常のdescribe()
- suitesが最初に収集され、thenのみが実行されます。これにより、この呼び出しが最初に呼び出されることが保証されます。
_'use strict'
let run = false
beforeEach(function() {
if ( run === true ) return
console.log('GLOBAL ############################')
run = true
});
_
毎回、すべてのテストの前に実行されることを確認したい場合は、実行フラグを削除します。
このファイルに_test/_beforeAll.test.js
_という名前を付けました。どこにでもインポート/要求する必要はありませんが、ファイル名の_.test.
_(または_.spec.
_)が重要なので、テストランナーがそれを取得します…
mocha.opts
_\o /を使用何かがある場合、テストを実行する前に一度だけセットアップするだけです(どのテストに関係なく...)、_mocha.opts
_は驚くほどエレガントなオプションです! – require
をファイルに追加するだけです(はい、もしモカにほとんど貢献しなくても、テストのセットアップに貢献します)。次の前に1回確実に実行されます。
(この例では、単一のテストまたは多くのテストが実行されようとしていることを検出します。前者の場合、すべてのlog.info()
を出力します。
更新:
誰かが方法を知っていれば、_once.js
_で実行されようとしているmochaスイートのいくつかの基本的なプロパティにアクセスするために、ここに追加して知りたいと思います。 (つまり、私のsuiteMode
-検出はお粗末です。別の検出方法があれば、いくつのテストを実行するか…)