<\/HEAD>
<\/P>
あなたはかっこいいアプリを書きます<\/STRONG><\/EM>。あなたのユーザーは満足し、あなたも満足し、すべてが順調です<\/EM>。誰かが新しい機能を欲しいと言います。あなたはこう思います、最高だぜ、任せてくれ<\/EM>。書き始めてリファクタリングをし、新しいモジュールを追加し、いくつかの他の部分を調整しているうちに、いつの間にかアプリケーション全体がクラッシュしてしまいます。何かが壊れていて、多くの変更を加えたためにどこで壊れたのか分からなくなっています。<\/P><\/P>あなたは完全に詰んでいます。<\/STRONG><\/P><\/P>こんなひどい状況に陥ったことがないかもしれませんが、新しい機能を追加する際に発生した奇妙な問題を回避するために、コードで醜いことをしなければならなかった経験はあるでしょう。<\/P><\/P>恥ずかしさ<\/H2>開発者として、私たちは皆それをやるべきだと感じています。多分、新しいプロジェクトを熱意を持って始めてテストを書きます。コードをテストすべきです。私は多くのテストを書いてプロジェクトを始めることがありますが、途中で続けられなくなり、それについてひどく後悔します。しかし、そうある必要はありません。ユニットテストは大規模プロジェクトに適しています、信じてください。もしかするとTDDやBDDかもしれませんし、単に後からテストを書く場合もあります。どのように行っても、プロジェクトが成長するにつれて自分自身に感謝することになるでしょう。<\/P><\/P>こちらは過去のEsri Dev Summitsからのテスト用リポジトリとクールなKarmaの例です。私はKarmaが好きで、クールなテストランナーですが、最近はテストにTheInternを再検討しています。Internは本当に素晴らしく、SitePenの素晴らしい投稿も読めます。InternRecorderについての記事もぜひご覧ください、とても素晴らしいです。<\/P><\/P>フローを簡素化する<\/H2>Karmaのようなものと比べてInternの唯一の欠点は、ファイル変更ごとにターミナルでテストを実行できないことでしたが、開発ツールキットでlive-reloadを使うことで回避しました。<\/P><\/P>live-reloadとGruntおよびいくつかのプラグインを組み合わせることで、アプリに変更を加えるたびにブラウザでアプリがリロードされ、テストページもリロードされるので、すぐに何か壊したかどうか確認できます。<\/P><\/P>
<\/P><\/P>緑色は美しい色です。<\/P><\/P>ここで私はSinonJSが好きです。私はそれを知っていて慣れていますが、人によって好みは異なるでしょう。<\/P><\/P>ではサンプルテストはどんな感じでしょう?こんな感じかもしれません。<\/P>define(function(require) {
var registerSuite = require('intern!object');
var expect = require('intern\chai!expect');
var View = require('app\components\map\WebMapView');
var topic = require('dojo\topic');
var config = require('app\config');
var utils = require('esri\arcgis\utils');
var chai = require('intern\chai!');
var sinon = require('sinon');
var sinonChai = require('sinon-chai');
chai.use(sinonChai);
var mapView;
registerSuite({
name: 'components: WebMapView',
setup: function() {
\/\/- テストセットアップ
sinon.stub(utils, 'createMap').returns({
then: function(){}
});
},
beforeEach: function() {
\/\/- 実行前
},
afterEach: function() {
\/\/- 実行後
if (mapView && mapView.destroy) {
mapView.destroy();
}
},
teardown: function() {
\/\/- ウィジェット破棄
utils.createMap.restore();
},
'Component is valid': function() {
expect(View).to.not.be.undefined;
},
'View publishes a valid map given a webmapid': function() {
mapView = new View({
webmapid: config.webmap.webmapid
});
expect(mapView.webmapid).to.equal(config.webmap.webmapid);
}
});
});<\/PRE><\/P>この長いコードは基本的にこれだけです。<\/P>'View publishes a valid map given a webmapid': function() {
mapView = new View({
webmapid: config.webmap.webmapid
});
expect(mapView.webmapid).to.equal(config.webmap.webmapid);
}<\/PRE><\/P>つまり、このコンポーネントを作成するときに、コンストラクターに渡したwebmapidを持つwebmapがあることを期待しているということです。それだけです。実装は私次第ですが、このテストは最終結果だけに関心があります。<\/P><\/P>物語を語る<\/H2>テストは素晴らしいドキュメントです<\/EM>。ライブラリやフレームワークの使い方がドキュメントでわからないときに、そのテストを参照して理解することが何度もありました。それらは非常に価値あるリソースです。ドキュメントの代わりにはなりませんが、素晴らしい補完物です。<\/P><\/P>JavaScriptユニットテストについてのチュートリアルはたくさんあります。多くはやベースですが、繰り返しますが私はが本当に好きになりました。Internはとうまく統合しますが、フルプラットフォームが不要ならローカルのとを使えます。そしてGrunt使用時にはでドライバー起動後に機能テスト実行できます。<\/P><\\/> run: {
& nbsp ; options: {
& nbsp ; & nbsp ; wait: false
& nbsp ; },
& nbsp ; webdriver: {
& nbsp ; & nbsp ; cmd: 'java',
& nbsp ; & nbsp ; args: [
& nbsp ; & nbsp ; & nbsp ; '-jar',
& nbsp ; & nbsp ; & nbsp ; 'tests/lib/selenium-server-standalone-2.46.0.jar',
& nbsp ; & nbsp ; & nbsp ; '-Dwebdriver.chrome.driver=node_modules/chromedriver/bin/chromedriver'
& nbsp ; & nbsp ; ]
& nbsp ; }
}< / PRE >< P >< / P >< P >しかしこれらはおそらく将来の記事向けの詳細でしょう。 < / P >< P >< / P >< H2 id = "toc-hId--1536716615" id = "toc-hId--1536716615">いくつかテストを書こう < / H2 >< P >私は現在ArcGIS JS API開発向けにこれを簡素化するためのYeoman generator に取り組んでおり、それにはテストも含まれています。まだ完成していませんが、近いうちに仕上げたいと思っています。 < / P >< P >< / P >< P >すべて細かい部分までテストしろとは言いませんが、アプリの動作をテストすることは良い考えです。 < / P >< P >< / P >< P >考慮すべき二つのこと: < / P >< OL >< LI >< STRONG >先にテストを書くこと < / STRONG > - テストは開発の指針になります。< LI >< STRONG >後からテストを書くこと < / STRONG > - 可能ですが、アプリを書いてアイデアをまとめる助けになります。ただし通過させるためだけのテストを書くリスクがあります。< P >< / P >< P >先ほど言ったように、テストはコードの実装には関心がありません。あなたはa を渡し、その結果を期待します b。それだけです。ですから、達成しようとしていることを素早く書き留める良い方法です。事後にテストを書くと、コードに合わせてテストを書いてしまうリスクがあり、そのコードは壊れている可能性があります。BUT、コードを書き進める際にこれらのテストを再実行すれば、以前に動作していたものを壊したかどうか少なくとも知ることができます。<\/P><\/P>JavaScriptのテストに関するリソースはたくさんあります。私が思いつくいくつかを紹介します。<\/P>Introduction To JavaScript Unit Testing<\/A><\/P>JavaScript Testing Recipes<\/A><\/P>Intern Tutorial esri jsapi<\/A><\/P><\/P>
Here is a demo project<\/A> にはテストとgruntツールが含まれており、あなたを助けます。<\/P><\/P>
さらに多くのgeodevのヒントやコツについては、
私のブログをチェックしてください<\/A>。<\/P><\/BODY><\/HTML>