78

現在、JavaScriptのユニットテストにmochaを使用しています。

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

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

4

6 に答える 6

27

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'
于 2012-05-12T06:36:09.963 に答える
1

依存関係の1つで使用されるグローバル変数を「モック」する必要があるときに、同様の問題が発生しました。

そのために .mocharc.js を使用しました。これは、「mocha」環境がセットアップされているときに、その JS ファイル内のコードが 1 回実行されるためです。

例 .mocharc.js:

global.usedVariable = "someDefinedValue";

/** other code to be executed when mocha env setup **/

module.exports = {};

これは私にとってはうまくいきましたが、それを行うにはかなり「汚い」方法に見えます。そのコードのより良い場所を知っている場合は、コメントしてください:)

于 2020-01-29T17:11:35.243 に答える
-1

モジュールを使用すると、テスト スイートのグローバル セットアップ/ティアダウンが簡単になります。RequireJS (AMD モジュール) を使用した例を次に示します。

まず、グローバル セットアップ/ティアダウンでテスト環境を定義しましょう。

// test-env.js

define('test-env', [], function() {
  // One can store globals, which will be available within the
  // whole test suite.
  var my_global = true;

  before(function() {
    // global setup
  });
  return after(function() {
    // global teardown
  });
});

私たちの JS ランナー (mocha の HTML ランナーに含まれており、他のライブラリやテスト ファイルと一緒に<script type="text/javascript">…&lt;/script>、外部 JS ファイルとして、またはより良い形で):

require([
          // this is the important thing: require the test-env dependency first
          'test-env',

          // then, require the specs
          'some-test-file'
        ], function() {

  mocha.run();
});

some-test-file.js次のように実装できます。

// some-test-file.js

define(['unit-under-test'], function(UnitUnderTest) {
  return describe('Some unit under test', function() {
    before(function() {
      // locally "global" setup
    });

    beforeEach(function() {
    });

    afterEach(function() {
    });

    after(function() {
      // locally "global" teardown
    });

    it('exists', function() {
      // let's specify the unit under test
    });
  });
});
于 2014-07-04T21:58:49.567 に答える