web-dev-qa-db-ja.com

モカのグローバルな「before」と「beforeEach」?

現在、JavaScriptの単体テストにmochaを使用しています。

いくつかのテストファイルがあり、各ファイルにはbeforebeforeEachがありますが、それらはまったく同じです。

それらすべて(またはそれらの一部)にグローバルbeforeおよびbeforeEachを提供するにはどうすればよいですか?

61
Freewind

別のファイルで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'
27
Michelle Tilley

テストフォルダーのルートで、グローバルテストヘルパーを作成しますtest/helper.jsこれにはbeforeとbeforeEachがあります

// globals
global.assert = require('assert');

// setup
before();
beforeEach();

// teardown
after();
afterEach();
77
AJcodez

mocha documentation …から

ルートレベルのフック

任意のファイルを選択して、「ルート」レベルのフックを追加することもできます。たとえば、すべての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._)が重要なので、テストランナーがそれを取得します…


ボーナストラック8-):_mocha.opts_\o /を使用

何かがある場合、テストを実行する前に一度だけセットアップするだけです(どのテストに関係なく...)、_mocha.opts_は驚くほどエレガントなオプションです! – requireをファイルに追加するだけです(はい、もしモカにほとんど貢献しなくても、テストのセットアップに貢献します)。次の前に1回確実に実行されます。

enter image description here

(この例では、単一のテストまたは多くのテストが実行されようとしていることを検出します。前者の場合、すべてのlog.info()を出力します。

更新:

誰かが方法を知っていれば、_once.js_で実行されようとしているmochaスイートのいくつかの基本的なプロパティにアクセスするために、ここに追加して知りたいと思います。 (つまり、私のsuiteMode-検出はお粗末です。別の検出方法があれば、いくつのテストを実行するか…)

27
Frank Nocke