現在、JavaScriptのユニットテストにmochaを使用しています。
いくつかのテストファイルがあり、各ファイルにはとがありますが、before
それらbeforeEach
はまったく同じです。
before
グローバルを提供beforeEach
し、それらすべて(または一部)に提供するにはどうすればよいですか?
現在、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'
依存関係の1つで使用されるグローバル変数を「モック」する必要があるときに、同様の問題が発生しました。
そのために .mocharc.js を使用しました。これは、「mocha」環境がセットアップされているときに、その JS ファイル内のコードが 1 回実行されるためです。
例 .mocharc.js:
global.usedVariable = "someDefinedValue";
/** other code to be executed when mocha env setup **/
module.exports = {};
これは私にとってはうまくいきましたが、それを行うにはかなり「汚い」方法に見えます。そのコードのより良い場所を知っている場合は、コメントしてください:)
モジュールを使用すると、テスト スイートのグローバル セットアップ/ティアダウンが簡単になります。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">…</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
});
});
});