第6章. JavaScriptのモジュール
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
モジュールとは、インタフェースを示すが、その状態や実装を隠す関数やオブジェクトのことである。Douglas Crockford,JavaScript:良いところ(O'Reilly, 2008)
この章では、JavaScriptコードをクリーンアップし、改善するためのいくつかのアクションを取る。JavaScriptモジュールを使って、テストコードと本番コードを分離する。JavaScriptでモジュールを書くにはいくつかの方法がある。テストコードをどのように組織化するかに注目し、その実行方法とプロデューサの出力を改善する。最後に、テストの冗長性を取り除く。大変な作業なので、さっそく始めよう!
コードをモジュールに分ける
Money とPortfolio クラスをテスト・コードから分離しよう。 test_money.js と同じフォルダにmoney.js とportfolio.js という名前のファイルを作成し、関連するコードをそこに移す。これが新しいフォルダ構造だ:
js ├── money.js ├── portfolio.js └── test_money.js
これがportfolio.js :
classPortfolio{constructor(){this.moneys=[];}add(...moneys){this.moneys=this.moneys.concat(moneys);}evaluate(currency){lettotal=this.moneys.reduce((sum,money)=>{returnsum+money.amount;},0);returnnewMoney(total,currency);}}
ここには示していないが、money.js というファイルにも同様に、Money クラスとそのメソッドが含まれている。
TDD_Project_Root フォルダーからnode js/test_money.js を実行してテストを実行すると、古い友人であるReferenceError が得られる:
ReferenceError:Moneyisnotdefined
クラスMoney とPortfolio がそれぞれのファイルにあるため、テストコードからアクセスできなくなっている。どうすればいいのか?
テストコードからヒントを得よう。require ステートメントを使って、assert ライブラリにアクセスしている。Money とPortfolio の両方をrequire にできるか?
はい、できる!しかし、その前に、まずそれぞれのファイルからクラスをエクスポートしなければならない。
money.js の一番最後に、Money クラスをエクスポートする行を追加しよう:
module.exports=Money;
同様に、portfolio.js ファイルの最後にmodule.exports ステートメントを追加する:
module.exports=Portfolio;
さて、test_money.js のトップに、require の文を2つ追加しよう:
constMoney=require('./money');constPortfolio=
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access