mocha をブラウザで使う場合、mocha.setup() で BDD, TDD などのスタイルを指定し、それに応じて describe/it, suite/test などの関数が window に登録されます。RequireJS と一緒に使う場合、テストコードが評価される際に mocha.setup() が呼ばれていないと、describe などが定義されておらずエラーになってしまいます。
そこでまず思いつくのは require() を入れ子状に呼ぶことですが、いまいちイケていません。
require(['mocha'], function () {
mocha.setup('bdd');
require(['test/foo_test'], function () {
mocha.run();
});
});
そこで、Stackoverflow にも書いたのですが、shim config の init プロパティを使うと、require を入れ子にしたりしなくてもうまくいきます。mocha が export される前に mocha.setup() を呼ぶことができるためです。
requirejs.config({
shim: {
'mocha': {
init: function () {
this.mocha.setup('bdd');
return this.mocha;
}
}
}
});
require(['mocha', 'test/some_test'], function (mocha) {
mocha.run();
});
テストコードでは mocha を require しましょう。
define(['mocha'], function (mocha) {
describe('Something', function () {
// ...
});
});