[解決済み] Mocha における describe() の役割は何ですか?
質問
のドキュメントは Mocha 公式サイト のドキュメントにこの例があります。
describe('User', function(){
describe('#save()', function(){
it('should save without error', function(done){
var user = new User('Luna');
user.save(function(err){
if (err) throw err;
done();
});
})
})
})
の中でいつテストをネストすべきか知りたい。
describe
関数の基本的な目的は何なのか、そして
describe
は何なのか。に渡される最初の引数を比較することはできますか?
describe
に渡される最初の引数を、プログラミング言語のコメントと比較できますか?何も表示されない
describe
は何も表示されません。読みやすくするためだけなのか、それともこの関数に何か他の使い道があるのでしょうか?
このような使い方をした場合、何か問題があるのでしょうか?
describe('User', function(){
describe('#save()', function(){
var user = new User('Luna');
user.save(function(err){
if (err) throw err;
done();
})
})
})
このようにしても、テストはパスします。
どのように解決するのですか?
この
it
の呼び出しは個々のテストを識別しますが、それ自体では
it
は Mocha にテストスイートがどのようなものであるかについて何も伝えません。
構造
. テストスイートの
describe
の呼び出しをどのように使うかが、テストスイートに構造を与えることになります。以下は
describe
を使ってテストスイートを構造化することで、できることのいくつかを紹介します。以下はテストスイートの例で、議論のために簡略化してあります。
function Foo() {
}
describe("Foo", function () {
var foo;
beforeEach(function () {
foo = new Foo();
});
describe("#clone", function () {
beforeEach(function () {
// Some other hook
});
it("clones the object", function () {
});
});
describe("#equals", function () {
it("returns true when the object passed is the same", function () {
});
it("returns false, when...", function () {
});
});
afterEach(function () {
// Destroy the foo that was created.
// foo.destroy();
});
});
function Bar() {
}
describe("Bar", function () {
describe("#clone", function () {
it("clones the object", function () {
});
});
});
想像してみてください
Foo
と
Bar
は本格的なクラスです。
Foo
には
clone
と
equals
メソッドを使用します。
Bar
は
clone
. 上記のような構造は、これらのクラスのテストを構成するための一つの可能な方法です。
(その
#
の表記は、いくつかのシステム (たとえば jsdoc など) ではインスタンスフィールドを示すために使われています。そのため、メソッド名と一緒に使用すると、クラスのインスタンスで呼び出されるメソッドを表します (クラスメソッドではなく、クラス自体で呼び出されます)。がなくてもテストスイートは同じように動作します。
#
.)
バナーの提供
Mocha のレポーターの中には、あなたがつけた名前を
describe
につけた名前を表示します。たとえば
spec
レポーター (これを使うには
$ mocha -R spec
を実行することで使用できます)、報告することになります。
Foo
#clone
✓ clones the object
#equals
✓ returns true when the object passed is the same
✓ returns false, when...
Bar
#clone
✓ clones the object
4 passing (4ms)
実行するパーツの選択を支援する
一部のテストだけを実行したい場合は、テスト実行時に
--grep
オプションを使用します。ですから、もしあなたが
Bar
クラスだけを気にするのであれば、次のようにすればよいでしょう。
$ mocha -R spec --grep Bar
と入力し、出力を得ます。
Bar
#clone
✓ clones the object
1 passing (4ms)
あるいは
clone
メソッドにしか興味がないのであれば
$ mocha -R spec --grep '\bclone\b'
を実行し、出力を得ます。
Foo
#clone
✓ clones the object
Bar
#clone
✓ clones the object
2 passing (5ms)
に与えられた値は
--grep
は正規表現として解釈されます。
\bclone\b
という単語だけを要求しています。
clone
のようなものでなく
clones
または
cloned
.
フックを提供する
上の例では
beforeEach
と
afterEach
の呼び出しはフックです。それぞれのフックは
it
の中にある
describe
呼び出しの中にあるもので、フックの親となります。様々なフックがあります。
-
beforeEach
これは個々のit
の中でdescribe
を呼び出します。 -
afterEach
これは個々のit
の中でdescribe
を呼び出します。 -
before
の前に一度だけ実行されます。it
の中にあるdescribe
の呼び出しが実行される。 -
after
これは個々のit
の中にあるdescribe
の呼び出しが実行される。
これらのフックは、テストに必要なリソースの取得やデータ構造の作成に使用でき、テスト終了後にリソースを解放したり、これらの構造を(必要であれば)破棄することができます。
あなたの質問の最後に示されたスニペットはエラーを生成しませんが、実際にはどんなテストも含んでいません。
it
.
関連
-
[解決済み】mongoError: トポロジーが破壊されました
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] node.js - リクエスト - "emitter.setMaxListeners() "はどのように?
-
[解決済み] package.jsonのチルダ(~)とキャレット(^)の違いは何ですか?
-
[解決済み] npm installの-saveオプションは何ですか?
-
[解決済み] インストールされているnpmパッケージのバージョンを検索する
-
[解決済み] npm package.jsonファイルのdependencies, devDependencies, peerDependenciesの違いは何ですか?
-
[解決済み] package.jsonの各依存関係を最新バージョンに更新する方法は?
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Mocha によるコードカバレッジ
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リソースの読み込みに失敗しました: net::ERR_CONNECTION_REFUSED : Nodejs
-
[解決済み】MongoClient v3.0使用時、db.collectionは関数ではない
-
[解決済み】Node.jsのホスト名/IPが証明書のaltnamesと一致しない。
-
[解決済み】Passport.js - エラー: ユーザーのセッションへのシリアライズに失敗しました。
-
[解決済み] npm install エラー - ローカルの発行者証明書を取得できません。
-
[解決済み] nodejs - http.requestでresponse.writeを使用する場合、第一引数は文字列またはBufferでなければなりません。
-
[解決済み] TypeErrorです。リクエストパスにエスケープされていない文字が含まれています。
-
[解決済み] nvm は npm config の "prefix" オプションと互換性がありません。
-
[解決済み] エラーです。Cannot find module 'ejs'
-
[解決済み] npm not able to find a fileに関連するエラーは何が原因でしょうか?node_modules サブフォルダ内にコンテンツがありません。なぜでしょうか?