第8章 ノードのテスト ノードをテストする
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
、現実世界でのテストとは一般的に、何かの悪いところを発見することである。コードに関して言えば、テストとは何が正しいかを発見することである。テストは、何かが機能していることを保証するものだ。
テストされていないコードは単純に危険だ。効率的でスケーラブルなコードは、十分にテストされている。テストとは、コードがやるべきことをやっていることを確認するだけでなく、コードやその環境、使用パターンが変わった後も、コードがやるべきことをやり続けていることを確認することでもある。テストとは、高品質のコードを書くことであり、潜在的な問題をできるだけ早期に発見することである。
コードの定期的なテストは、コードを健全に保ち、保守を容易にする。また、変更を加える際の保守者の自信も増す。テストされていないコードに変更を加えることは、災いのもとだ。モジュールXの新機能がモジュールYの他の機能を壊すかもしれない。変更のたびにすべてのコードを手作業でテストすることはできない。それを回避する方法はない。コードをテストするためにコードを書かなければならないが、テストコードにも問題があるかもしれない。テストは偽陰性や偽陽性を引き起こすかもしれない。だからこそ、テストを正しく行うことが非常に重要なのだ。それがこの章のすべてだ。
アサーションとランナー
Node の テストは、アサーションのセットである。テストを実行するには、テストランナーが必要だ。Nodeには両方のモジュールが組み込まれている。以下は、配列に対するmap メソッドの簡単なテストである:
importtestfrom'node:test';importassertfrom'node:assert/strict';test('doubles items for a 2*e transformer',()=>{// ArrangeconstinputArray=[1,2,3,10];constexpectedResult=[2,4,6,20];// ActconstactualResult=inputArray.map((e)=>2*e);// Assertassert.deepEqual(actualResult,expectedResult);});
Arrange-Act-Assertのパターンでテストを考えるとよい:
- 手配する
-
このセクションはセットアップである。ここでは、テストの環境と前提条件を準備する。
- 行為
-
このセクションでは、テストしたいメソッドを実行する。
- アサート
-
このセクションは、我々の期待を確認する場所である。
このテストを実行するには、Nodeスクリプトに記述し、nodeコマンドで実行するだけだ。
図8-1に出力を示す。
node:test モジュール には、テストを整理したりラベルを付けたりするのに使えるオブジェクトがいくつかある。この例ではtest メソッドを使って、テストにdoubles items for a 2*e transformer という名前を付けた。node コマンドがこのメソッドを見ると、組み込みのランナーはその中のアサーションを実行して、このような出力を出す。この出力には、すべてのテスト名と、それが成功したか失敗したかが、それぞれのテスト時間とすべてのテストについての診断サマリーとともにリストされている。この例からわかるように、我々が行った1つのテストはOKだった。 ...