[解決済み] mocha.jsで複数のファイルからテストを結合する
質問
私は複数のファイルからすべてのテストを1つのファイルに結合しようとしています、このようなものです。
describe('Controllers', function() {
describe('messages.js', function() {
require('./controllertests/messages').test(options);
})
describe('users.js', function() {
require('./controllertests/users').test(options);
})
})
これはテストに参加する最良の方法ではないと思いますが、これを行う方法の例を見つけるのに苦労しました :s
どのように解決するのですか?
複数のモジュールをインクルードしたい場合
を
に含めたい場合
describe
のような階層にすることで、あなたがやっていることはほとんど
それ
であり、Mocha 用のカスタムテストローダーを書きたいのでない限り、そのようなことはできません。カスタムローダーを書くことは、あなたがすでに持っているものよりも簡単ではありませんし、あなたのコードをより明確にするものでもないでしょう。
私がどのようにいくつかのことを変更するのかの例を示します。この例では
test
というサブディレクトリを構成しています。
.
└── test
├── a
│ └── a.js
├── b
│ └── b.js
├── common.js
└── top.js
top.js
:
function importTest(name, path) {
describe(name, function () {
require(path);
});
}
var common = require("./common");
describe("top", function () {
beforeEach(function () {
console.log("running something before each test");
});
importTest("a", './a/a');
importTest("b", './b/b');
after(function () {
console.log("after all tests");
});
});
は
importTest
関数は、複数のモジュールのインポートの繰り返しを処理するために、すべての
describe(... require...
を毎回入力することなく、複数のモジュールのインポートの繰り返しを処理できることを示しただけです。そのため
common
モジュールは、テストスイートの複数のモジュールで使用するために必要なものを保持するためのものです。実際に使っているのは
top
の中では使っていませんが、必要であればそこで使うことができます。
ここで注意しておきたいのは
beforeEach
で登録されたすべてのテストの前にそのコードが実行されます。
it
の中にあるかどうかにかかわらず
describe
の中で
top
に表示されるか
インポートされたモジュールのいずれかが
. と
--recursive
は
beforeEach
のコードはそれぞれのモジュールにコピーされなければなりません。
beforeEach
フックを各モジュールに置くか、あるいは共通モジュールからインポートされた関数を呼び出すようにします。
また
after
の後に実行されます。
の後に実行されます。
のテストの後に実行されます。これは
--recursive
. もし
--recursive
のコードを追加し
after
のコードを各モジュールに追加すると、モジュールごとに一度だけ実行されるのではなく、モジュールごとに一度だけ実行されます。
全体
テストに対して一度だけ実行されるのではなく、モジュールごとに一度だけ実行されます。
すべてのテストが単一の
top
という見出しは
--recursive
. とは
--recursive
では、各ファイルは
describe("top"
とすることもできますが、この場合、新しい
top
の見出しが作成されます。
common.js
:
var chai = require("chai");
var options = {
foo: "foo"
};
exports.options = options;
exports.chai = chai;
exports.assert = chai.assert;
を使うことで
モジュール
という名前の
common
というように、テスト・スイートのいくつかで行っています。
require
を何度も繰り返したり、グローバルな
読み取り専用
変数や、状態を保持しない関数を保持することです。を汚染しないことを好みます。
global
このオブジェクトは本当にグローバルで、あなたのコードがロードしているサードパーティライブラリでもアクセス可能だからです。これは、私のコードでは容認できるものではありません。
a/a.js
:
var common = require("../common");
var options = common.options;
var assert = common.assert;
it("blah a", function () {
console.log(options.foo);
assert.isTrue(false);
});
b/b.js
:
it("blah b", function () {});
関連
-
[解決済み] 再インストールを繰り返しても、npm run でモジュール 'sass' が見つからない。
-
[解決済み】Express.js req.bodyが未定義です。
-
[解決済み】Mongooseで配列の値を更新する方法
-
[解決済み】Heroku + node.jsのエラー(Webプロセスが起動後60秒以内に$PORTにバインドできなかった)。
-
[解決済み] npm install エラー - ローカルの発行者証明書を取得できません。
-
[解決済み] nodejs - http.requestでresponse.writeを使用する場合、第一引数は文字列またはBufferでなければなりません。
-
[解決済み] Macでポート3000をロックしているプロセスを見つける(そして殺す)【終了
-
[解決済み] NPMが同じエラーで固まる EISDIR: ディレクトリに対する不正な操作、エラーで読み込み (ネイティブ)
-
[解決済み】アプリにtestsディレクトリがあるとき、Djangoで特定のテストケースを実行する
-
[解決済み] ExpressJS のインスタンスをプログラムでシャットダウンするにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] (node:63208) DeprecationWarning: collection.ensureIndex は非推奨です。代わりにcreateIndexesを使用してください [重複]。
-
[解決済み】Express.js req.bodyが未定義です。
-
[解決済み】passport.js passport.initialize() ミドルウェアが使用されていません。
-
[解決済み】Mongooseで配列の値を更新する方法
-
[解決済み】NPMインストールエラー:解析中の予期せぬJSON入力の終了 '...nt-webpack-plugin": "0'' 付近。
-
[解決済み] Node.jsで「btoaが定義されていない」エラーが発生する
-
[解決済み] S3 Bucket に何かを送信しようとすると、AWS Missing credentials が表示される (Node.js)
-
[解決済み] エラーです。Cannot find module 'ejs'
-
[解決済み] MongoNetworkError: 最初の接続でサーバー [localhost:27017] への接続に失敗 [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017] 。
-
[解決済み] "app.use(express.cookieSession())" に "secret" オプションが必要です。