テストで学ぶJavaScriptについて
A Test-Driven JS Assessment というテストを通るようなコードを書いて、JavaScriptを学ぶものが公開されていたので、それの紹介です。
JS Assessmentは最初に失敗するテストが用意されていて、そのテストコードを通るような関数などを書いていってJavaScriptの力試し、学習をするものです。
簡単にやり方を書くと、Node環境を用意した状態で
git clone https://github.com/rmurphey/js-assessment.git
などで、リポジトリをダウンロードして、
ダウンロードしたディレクトリ内で、 nodeを使って以下のようコマンドを実行してテストが実行できるローカルサーバを立ち上げます。
npm install
node bin/serve
実行した状態で http://localhost:4444 というURLに行けば、Mochaで書かれたテストが走った結果が表示されます。
テストを通るコードの書き方は、node bin/serve を実行した時に表示されますが、
To work on the tests, open a browser and visit http://localhost:4444. Then, edit the tests in the files in the tests/app directory, reloading your browser to see whether the tests are passing. Each test will look something like this: it("you should be able to return a truthy value", function() { // define a function for fn so that the following will pass expect(fn()).to.be.ok(); }); In the case of the above test, you'd need to define a value for fn (by default, fn is a function that does nothing): it("you should be able to return a truthy value", function() { // define a function for fn so that the following will pass fn = function() { return true; }; expect(fn()).to.be.ok(); }); For some tests, the instructions will be more involved; in those cases, the inline comments should give you the details you need.
と書かれているように、tests/appにあるコードを編集して、それぞれのitの中にテストケースを通るような関数を定義したりして、
http://localhost:4444にアクセスして全てのテストが通るようにするのが目的です。
e.g) solve Arrays Test · c955516 · azu/js-assessment
テストコードはNodeで動くテストフレームワークのMochaを使って書かれています。
expectで期待してる動作は結構そのまま分かる感じなので、itのテスト文とあわせれば、大体期待してる挙動はわかるとは思いますが、
Mocha自体の挙動も少し知っておいたほうがいい場合もあります。
用意されてるテストはArrayの機能のテストやBackboneを使ったViewのテスト、非同期のテスト等が入っています。
これで、A Test-Driven JS Assessmentの紹介は終わりですが、これ見た時に禅の公案(Koan)に何か似てるなとか思った。
JavaScriptでは
- liammclennan/JavaScript-Koans ( javascript-koans – Javascript learning tool. – Google Project Hosting )
- 禅の公安スタイルでCoffeeScriptを学ぶ「coffeescript-koans」 – にのせき日記
あたりが知られてそうな気がします。(他にも色々あるみたいだけど Search · Koans Javascript )
Koanとは以下のような穴埋め用のテストがかかれていて、そのテストを正しく書いてプログラミングを学べるものです。
test("not", function() {
not(__, 'what is a false value?');
});
という穴埋め問題だったら
test("not", function() {
not(false, 'what is a false value?');
});
のように、穴埋めするという感じのものです。
KoanとJS Assessmentを比較すると、Koanは穴埋めという要素が強くてロジックなどは用意されてる感じになっています。
一方 、A Test-Driven JS Assessmentはテストだけ書かれていて、ロジックなどを書いてそのテストを通るような関数を書くというものになっています。
似ているところもありますが、やりたいことは逆な感じなので、A Test-Driven JS Assessmentの場合は人によって答えが全然違うという事もありえて、
実際のテストファーストなものを書くのに近い感じになっていそうです。
これを書きながら、JavaScriptを学ぶ時に、最初からテストと絡めて学習したほうが良い感じになるのかなということについて考えていました。
実際に新人教育とかでそういう事をしている会社さん等の成果とかを聞いてみたいですね。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。