[解決済み] before()` と `beforeEach()` の違いは何ですか?
質問
とは具体的にどのような違いがあるのでしょうか。
モカ
's
before()
と
beforeEach()
? (同じ質問で
after()
と
afterEach()
.)
と仮定します。
before()
につき1回実行されます。
describe()
ブロックと
beforeEach()
は1回のテストにつき1回実行されます (
it()
ブロック)を作成します。それは本当ですか?
また、どのような場合にどちらを使うか選択するのでしょうか?
どのように解決するのですか?
before()
が一度実行される前に
すべて
のテストは
describe
after()
の後に一度だけ実行されます。
すべて
のテストは
describe
beforeEach()
が実行される前に
各
のテストは
describe
afterEach()
の後に実行されます。
各
のテストを
describe
どちらを使うかは、実際のテストによります。
さて、長い説明になります。もし、あなたが
mocha -R min
をこの上に乗せる。
describe("top", function () {
before(function () {
console.log("top before");
});
after(function () {
console.log("top after");
});
beforeEach(function () {
console.log("top beforeEach");
});
afterEach(function () {
console.log("top afterEach");
});
it("test1", function () {
console.log("top test1");
});
describe("sublevel", function() {
before(function () {
console.log("sublevel before");
});
after(function () {
console.log("sublevel after");
});
beforeEach(function () {
console.log("sublevel beforeEach");
});
afterEach(function () {
console.log("sublevel afterEach");
});
it("test1", function () {
console.log("sublevel test1");
});
it("test2", function () {
console.log("sublevel test2");
});
});
it("test2", function () {
console.log("top test2");
});
});
のようなものが表示されます(関係ない出力は省略しました)。
top before
top beforeEach
top test1
top afterEach
top beforeEach
top test2
top afterEach
sublevel before
top beforeEach
sublevel beforeEach
sublevel test1
sublevel afterEach
top afterEach
top beforeEach
sublevel beforeEach
sublevel test2
sublevel afterEach
top afterEach
sublevel after
top after
サブレベルの各テストの前後で何が実行されるかを見ると、意外と知られていないことがあります。
ともに
は
beforeEach
のコールバックが呼び出されます。同じことを
afterEach
.
また、このシーケンスに驚かれる方もいらっしゃいます
sublevel before
,
top beforeEach
,
sublevel beforeEach
. 彼らは、外側のスコープにあるすべてのフックは内側のスコープにあるすべてのフックより先に実行されるべきだと考えているので、そのような順序を期待しているのです。
top beforeEach
,
sublevel before
,
sublevel beforeEach
. しかし、Mocha がフックを実行する順序は完全に理にかなっています。
before
フックは一連のテストの舞台を用意するためのものであり、一方
beforeEach
テストは個々のテストのためのものです。Mocha がテストを実行するとき、すべての
before
と
beforeEach
で設定したフックを
describe
を含むすべての先祖と、それを含む
describe
がテストに適用されます。Mocha はそれぞれの
before
フックは一番外側のスコープから一番奥のスコープまで、そしてすべての
beforeEach
は一番外側のスコープから一番内側のスコープにフックします。
しかし
は、すべての
before
フックが適用され、そのフックは
beforeEach
フックです。これは上記の順序を説明しています。
sublevel before
が実行される前に
top beforeEach
であるため
before
フックを使用します。そして
after
と
afterEach
の場合、同じロジックが適用されますが、順序は逆になります:すべての
afterEach
フックが実行される前に、適用される
after
フックです。
また、Mocha は私がどのように
it
との相対的な呼び出しです。
describe
の呼び出しは、トップレベルの
describe
. これは
top test1
,
top test2
と
では
であったにもかかわらず、サブレベルテストでは
top test1
で、次にサブレベルテスト、そして
top test2
.
の中で使いたいもの
before
,
beforeEach
などは、テストの内容によって異なります。もしモックオブジェクトやデータ構造を設定する必要があり、 そのオブジェクトや構造体が
できる
のすべてのテストで再利用され、1つの
describe
を使用することができます。
before
で設定し
after
を使用すると、それを取り壊すことができます。これは、構造体に対して読み取り専用のテストを行っている場合に起こりうることです。すべてのテストがそれを読むだけなら、何度も作成する必要はありません。もしあなたの
describe
が必要です。
新しい
というのは、各テストは
修正
を使用する必要があります。
beforeEach
を使用して、テストごとに新たに構造を作成し、その後
afterEach
は、きれいに解体する必要がある場合です。こうすることで、テストの分離を確実にします。各テストは既知の状態から始まり、成功するために以前のテストの有無に依存しません。
関連
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] Bowerとnpmの違いは何ですか?
-
[解決済み] varキーワードの目的と、どのような場合に使用する(または省略する)べきですか?
-
[解決済み] Jestの'it'と'test'の違いは何ですか?
-
[解決済み】JavaScript版sleep()とは?)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】このエラーの原因は何ですか - "Fatal error: ローカルgruntを見つけることができません"
-
[解決済み】TypeError: $(...).DataTable は関数ではありません。
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み】JavaScriptのボタンonclickが機能しない
-
[解決済み】WebpackとBabelで「このファイルタイプを扱うには適切なローダーが必要な場合があります。
-
[解決済み】SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】Uncaught SyntaxError: JSON の位置 0 に予期しないトークン u があります。
-
[解決済み】TypeError: AngularJSで未定義のプロパティ'get'を読み取れない
-
[解決済み】 \u003C とは何ですか?