ホームページ > 記事 > ウェブフロントエンド > NodeJS テスト フレームワーク mocha の使い方の詳細な説明
この記事では、NodeJS で最も一般的に使用されるテスト フレームワークである mocha のインストールと簡単な使用法について簡単に説明します。これは、ブラウザ上で直接 JavaScript コード テストを実行することをサポートしています。これは、最も一般的に使用されるものです。 NodeJSのテストフレームワークはmochaだと思います。さまざまなノードアサートライブラリをサポートし、非同期テストと同期テストの両方をサポートし、結果をエクスポートする複数の方法をサポートし、ブラウザ上で直接 Javascript コードテストを実行することもサポートします。
この記事の例のほとんどは公式 Web サイトの例から派生したものですが、一部の例はニーズや私自身の感覚に基づいて変更されています。詳しい導入については、公式 Web サイトを参照してください: Mocha on Github
インストール:nodejs v0.10 と npm が正常にインストールされたら、次のコマンドを実行します。
# npm install -g mocha
p.s. Ubuntuの場合、aptソースのnodejsバージョンが古いため、一部の
モジュールがサポートされないことに注意してください。nodejs公式Webサイトからソースコードをインストールしてください。
Mocha への最初のステップ:
以下は最も単純な Mocha の例です:
var assert = require("assert"); describe('Array', function(){ describe('#indexOf()', function(){ it('should return -1 when the value is not present', function(){ assert.equal(-1, [1,2,3].indexOf(5)); assert.equal(-1, [1,2,3].indexOf(0)); }) }) });
describe (moduleName, testDetails) 上記のコードからわかるように、上記のコードでネストされた 2 つのように、describe はネストできます。 description は、テスターが Array モジュールの下の #indexOf() サブモジュールをテストしたいと理解できます。 module_name は気軽に選択できますが、理解できるようにすることが重要です。
it (info, function) 特定のテスト ステートメントは、そのコールバック関数
に配置されます。一般的に、infostring は、期待される正しい出力の短い 1 文の説明を書き込みます。 it ブロックのテストが失敗すると、コンソールに詳細情報が出力されます。一般に、出力は最も外側の記述の module_name から始まり (パス、再帰チェーン、またはコールバック チェーンに沿っていると理解できます)、最後に情報を出力し、予期された情報コンテンツが満たされていないことを示します。実際のテストケースassert.equal (exp1, exp2) アサーションに対応し、exp1 の結果が exp2 と等しいかどうかを判定します。ここで採用される等価判定は === ではなく == です。つまり、assert.equal(1, ‘1’) は True とみなされます。これは、nodejs のassert.js の単なるアサーション形式です。同様に一般的に使用される should.js については後述します。 exp1 と exp2 が両方とも文字列で、文字列の比較でエラーが発生した場合、コンソールは色を使用して異なる部分をマークします。
最初のステップのコードは明らかに同期コードですが、非同期コードでは何をすべきでしょうか?それは非常に簡単です。完了を示すために最も深いコールバック関数に done() を追加します。
fs = require('fs'); describe('File', function(){ describe('#readFile()', function(){ it('should read test.ls without error', function(done){ fs.readFile('test.ls', function(err){ if (err) throw err; done(); }); }) }) })
done ()0c6dc11e160d3b678d68754cc175188a ウォーターフォール プログラミングの習慣によれば、done という名前はコールバックの最も深い点、つまりネストされたコールバック関数の作成の終了を意味します。しかし、コールバック チェーンの場合、「完了」とは実際には、ここからテストを開始し、レイヤーごとにコールバックするように mocha に指示することを意味します。
上記のコード例は、test.ls を存在しない test.as に変更しようとしています。特定のエラー位置が返されます。
ここで質問があるかもしれませんが、2 つの非同期関数 (フォークされた 2 つのコールバック チェーン) がある場合、done() をどこに追加すればよいでしょうか?実際、現時点では 1 つの it で 2 つの関数をテストすることはできません。実際、done を複数回呼び出すと、mocha はエラーをスローします。つまり、テストの詳細を省略し、関数本体のみを保持します。これは一般に、フレームワークのテスト責任者がフレームワークを作成し、その詳細をチーム メンバーに実装させている場合や、テストの詳細が完全に正しく実装されていないため、グローバルなテスト状況への影響を避けるために最初に注釈を付ける必要がある場合などに適用されます。 。この場合、mocha はデフォルトでテスト パスになります。
これは Python のパスと少し似ています。fs = require('fs'); describe('File', function(){ describe('#readFile()', function(){ it('should read test.ls without error', function(done){ fs.readFile('test.ls', function(err){ if (err) throw err; done(); }); }) it('should read test.js without error', function(done){ fs.readFile('test.js', function(err){ if (err) throw err; done(); }); }) }) })
Exclusive && Inclusive
は実はわかりやすく、それぞれonlyとskipの機能に対応しています。describe('Array', function(){ describe('#indexOf()', function(){ it('should return -1 when the value is not present', function(){ }) }) });
only の機能はスキップをブロックするため、共有のみとスキップには実質的な意味はありません。 fs = require('fs');
describe('File', function(){
describe('#readFile()', function(){
it.skip('should read test.ls without error', function(done){
fs.readFile('test.ls', function(err){
if (err) throw err;
done();
});
})
it('should read test.js without error', function(done){
})
})
})
上記コードにはtest.asが存在しませんが、スキップのためtest completeと表示されます。
before と after は単体テストでよく使用されます。 mocha は beforeEach() と afterEach() も提供します。
読みやすいように、ここではライブスクリプトで表現しています。!-> は function(){} として理解できます。詳細を注意深く読む必要はありません。フレームワークを通じてこれらの関数の使用方法を理解するだけで十分です。fs = require('fs'); describe('File', function(){ describe('#readFile()', function(){ it.skip('should read test.ls without error', function(done){ fs.readFile('test.as', function(err){ if (err) throw err; done(); }); }) it('should read test.js without error', function(done){ }) }) })結果からわかるように(afterの使い方は前と同じです)、
beforeそれぞれは現在のdescribeの下にあるすべてのサブケースに有効になります。 前後のコードに特別な順序の要件はありません。
同じ記述の下に複数の before が存在する可能性があり、実行順序はコードの順序と同じです。同一describeでの実行順序は、before、beforeEach、afterEach、afterです
beforeが複数ある場合、実行順序は一番外側のdescribeのbeforeから始まり、他は同じです。
テスト駆動開発 (TDD)
mocha默认的模式是Behavior Driven Develop (BDD),要想执行TDD的test的时候需要加上参数,如
mocha -u tdd test.js
前文所讲的describe, it, before, after等都属于BDD的范畴,对于TDD,我们用suite, test, setup, teardown。样例代码如下:
suite 'Array', !-> setup !-> console.log 'setup' teardown !-> console.log 'teardown' suite '#indexOf()', !-> test 'should return -1 when not present', !-> assert.equal -1, [1,2,3].indexOf 4
以上がNodeJS テスト フレームワーク mocha の使い方の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。