何時間も過ごした後、タッチしなかった部分は、恐ろしく不幸になりました。これで、既存のコードをどのように壊したかを把握しようとするために、作業の日々をバックトラックするという課題に直面しています。幸せな日は間違いなく再びここにありません。 そのまさにシナリオが私が認めたい以上に私を噛んだ。そして、あなたがしばらくコーディングしているなら、おそらくあなたもそれを見たことがあるでしょう。ただし、このシナリオを非常に苦痛にしている理由を考えてみましょう。新しいコードが既存のコードを破ったためではありません。それは開発では避けられません。本当の痛みは、破損に気付くのに時間がかかったことです。アプリケーションが機能していることを知って以来、非常に多くの開発があるため、バグが隠れている可能性のあるコードが大量にあります。そして、それは干し草の山で針を狩るようなように思えるかもしれませんが、私たちはそれを潜るしかありません。 この記事では、JavaScript開発からこのシナリオを本当に追放するつもりです。針を探しているコードの数時間、数日、または数週間を掘ることはもうありません。私たちが採用する原則は簡単なものです。
を作成するとすぐにバグを見つけます。それは正しい;バグを導入するコードを作成するときにすぐにわかります。さらに、私たちがプロセスに費やした余分な努力は、初期開発が完了すると無駄になりません。開発バグをキャッチするのと同じテストコードは、統合環境で完全に再利用可能になります。テストをソースコード管理システムに簡単に組み込むことができ、コードベースに入る前にバグをブロックできます。次の4つのセクションでは、まずJavaScriptテスト環境に必要なツールを調べます。次に、理解するのに十分なシンプルなアプリケーションを検討しますが、実際の制作Webアプリケーションに存在する可能性のあるすべての機能と機能を備えています。最後の2つのセクションでは、開発中に環境を使用してサンプルアプリをテストする方法を示しています。
キーテイクアウト
-
開発中の早期のバグ検出を強調して、後の段階で複雑な問題を防ぎ、スムーズなコーディングエクスペリエンスを確保し、バックトラッキングを最小限に抑えます。
- ブラウザーとnode.js環境の両方との互換性のため、Mochaをコアテストフレームワークとして利用して、開発から統合テストへのシームレスな移行を可能にします。 CHAIアサーションライブラリを組み込み、テストの読みやすさと柔軟性を高め、さまざまな開発者の好みに応える複数のスタイル(アサート、期待、すべき)を提供します。
- スパイ、スタブ、モックを作成するためにSinon.jsを使用します。これらは、外部ライブラリやサービスとの相互作用をテストするために不可欠です。 Test’emを使用して継続的なテスト環境を設定して、コードの変更時にテストを自動的に実行し、アプリケーションの健康に関する即時フィードバックを提供します。
- 開発中に、モデル、ビュー、およびコレクションの詳細な単体テストの作成に焦点を当て、各コンポーネントが単独で正しく機能するようにします。 node.jsでコマンドライン実行のためにユニットテストを適応させることにより、統合テストにスムーズに移行し、生産環境でアプリケーションが期待どおりに動作するようにします。
- JavaScriptテスト環境のアセンブリ
- nirvanaの単体テストには、ワークベンチにない可能性のある開発ツールが必要です(まだ)。ニュースは、良い面と悪い面でも、オプションがたくさんあるということです。それは私たちに選択肢を与えてくれるので朗報です。そして、今日のフロントエンド開発のペースはあまりにも多くの選択肢があることを意味するので、それは悪いニュースです。評価に焦点を当てるために、トップ2の目標について明確にしましょう。他のすべては二次的です:
- 私たちの環境は、開発中の摩擦のない継続的なテストをサポートする必要があります 開発中に作成されたテストは、統合で等しく使用できる必要があります。
- 実行環境
テストフレームワーク
テストツールは、Webブラウザーとnode.js環境の両方をサポートする必要があることを確認したため、コアテストフレームワークを選択するのに十分な選択肢を絞り込むことができます。多くのJavaScriptテストフレームワークが存在しますが、ほとんどはブラウザーテストに大きく偏っています。通常、node.jsで動作させることは通常可能ですが、多くの場合、無力なハックまたは調整が必要です。この問題に苦しんでいないフレームワークの1つはモカです。
Mochaは、ノードとブラウザで実行されている機能が豊富なJavaScriptテストフレームワークであり、非同期テストをシンプルで楽しくします。
node.js用に開発されたMochaは、Webブラウザーも容易にサポートするために拡張されました。 Mochaをテストフレームワークとして使用することにより、変更なしで開発と統合の両方をサポートするテストを作成できます。
アサーションライブラリ
いくつかのJavaScriptテストフレームワークとは異なり、Mochaは柔軟性を最大限に活用できるように設計されています。結果として、それを完成させるには、いくつかの追加作品を選択する必要があります。特に、JavaScriptアサーションライブラリが必要です。そのために、Chai Assertion Libraryに依存します。 Chaiは、すべての一般的なアサーションスタイルをサポートするという点でややユニークです。コード。カバーの下では、それらはすべて同等です。テストを1つのアサーションスタイルからもう1つのテストに翻訳するのは簡単です。アサーションスタイルの主な違いは、読みやすさです。アサーションスタイルの選択は、主にあなた(またはあなたのチーム)が最も読みやすいスタイルと、どのスタイルが最も理解できるテストを生成するかに依存します。違いを確認するには、次のコードの些細なテストの開発を検討してください。 従来のアサートスタイルのテストは、次のように記述できます そのテストは仕事を終了しますが、古い学校の単体テストに慣れていない限り、読んで解釈するのは少し難しいでしょう。代替のアサーションスタイルでは、を使用します ほとんどの開発者は、アサートスタイルのテストよりも読みや理解が容易になると予想されるスタイルのアサーションを見つけます。 3番目の選択肢は、テストアサーションを自然言語のようにさらに行う必要があります:
<span>var sum = 2 + 2;</span>
Chaiライブラリは、3つのアサーションスタイルすべてをサポートしています。この記事では、
に固執します スパイ、スタブ、および模擬assert<span>.equal(sum, 4, "sum should equal 4");</span>この記事で考慮する些細な例を含む
ほとんどのWebアプリは、サードパーティの図書館とサービスに依存しています。多くの場合、コードをテストするには、それらのライブラリやサービスを観察する、または制御する必要があります。 Sinon.JSライブラリは、これらの相互作用をテストするための多くのツールを提供しています。このようなツールは、3つの一般的なクラスに分類されます
<span>expect(sum).to.equal(4);</span>
spy
。テスト中のコードの外側の機能への呼び出しを観察するテストコード。スパイは、これらの外部機能の動作を妨害しません。彼らは単に呼び出しと返品値を記録するだけですsum<span>.should.equal(4);</span>
stub
。テスト中のコードの外側の機能を呼び出すためのテストコード。スタブコードは、外部関数を再現しようとはしません。テスト下のコードが外部関数にアクセスすると、未解決のエラーを防ぎます。 mock。テスト中のコード外で機能またはサービスを模倣するテストコード。モックを使用すると、テストコードはそれらの関数またはサービスからの返品値を指定して、コードの応答を確認できるようにします。
テストワークベンチの最終ツールは、ユニットテストの開発環境です。この例では、test’emを使用します。 Test’emは、連続テスト環境を設定および実行するための便利なスクリプトのコレクションです。選択した場合、スクリプトを自分で書いて、環境を手動で管理することができます。しかし、Toby Ho(Test’emの作成者)は、私たちにトラブルを救うことができる素晴らしいパッケージをまとめました。
サンプルアプリケーションテスト環境が動作していることを確認するには、簡単なアプリケーションを考えてみましょう。このアプリケーションには、その裸の必需品には偏っていますが、実際のアプリケーションに必要なすべての機能が含まれています。 (アプリケーションの完全なソースコードはGitHubで入手できます。)

TODOSデータベース
アプリケーションは、TODOの情報を保持するデータベーステーブルから始まります。このテーブルを作成するために使用できるSQLは次のとおりです。
そして、テーブルがテストデータを入れた後のテーブルがどのように見えるかを次に示します。
<span>var sum = 2 + 2;</span>
id
title当社のWebアプリケーションにはこのデータベースへのアクセスが必要なため、標準のRESTインターフェイスを提供します。 APIはRubyコンベンションに従いますが、サーバーテクノロジーによって簡単に実装できます。特に:
get api/todosは、データベース内のすべての行のJSONエンコードされた配列を返します。
get api/todos/nnnは、nnnに等しいIDを持つtodoのJSON表現を返します。
POST API/TODOSは、リクエストのJSONエンコードされた情報を使用してデータベースに新しいTODOを追加します。- put api/todos/nnnは、リクエストでjsonエンコードされた情報を使用して、nnnに等しいIDでtodoを更新します。
- delete api/todos/nnnデータベースからnnnに等しいIDでtodoを削除します。
- Rubyが特に好きではない場合、ソースコードにはこのAPIの完全なPHP実装が含まれています。
- javascriptライブラリ
- 控えめなアプリケーションは、ライブラリなしで純粋なJavaScriptに実装するのに十分なほど簡単ですが、はるかに大きな計画があります。小さいかもしれませんが、最終的にはアプリは驚くべき機能と楽しいユーザーインターフェイスを備えています。その日に備えて、究極のキラーアプリをサポートできるフレームワークの上に構築します:
- jquery dom操作、イベント処理、サーバー通信のための。
- underscore.js多くの不可解なユーティリティを使用してコア言語を強化します。
- backbone.jsモデルとビューの観点からアプリケーションの構造を定義する。
アプリケーションを構成するコンポーネントがわかったので、それをサポートするHTMLスケルトンを定義できます。 (まだ)派手なものはありません(まだ)、最小限のHTML5ドキュメント、いくつかのJavaScriptファイル、そして物事を開始するための小さなコード。
開発中のテスト
<span>var sum = 2 + 2;</span>
ツールを選択し、アプリケーションを指定したので、開発を開始する時が来ました。最初のタスクはツールのインストールです
ツールのインストールブラウザで開発する場合でも、テスト環境はnode.jsに依存しています。したがって、最初のステップは、node.jsとノードパッケージマネージャー(NPM)のインストールです。 Node.js Webサイトには、OS X、Windows、Linux、Sunos用の実行可能バイナリ、および他のオペレーティングシステムのソースコードがあります。インストーラーを実行した後、コマンドラインからnode.jsとnpmの両方を確認できます。
必要なものはすべて、ノードパッケージとして便利に利用できます。ノードパッケージマネージャーは、インストールと依存関係を処理できます。
プロジェクト構造の作成
assert<span>.equal(sum, 4, "sum should equal 4");</span>この例のソースコードには、次の15のファイルを備えた完全なプロジェクト構造が含まれています。
各フォルダーとファイルに含まれるものは次のとおりです
- todos.html:アプリケーション用のスケルトンHTMLファイル、上に完全に示されています。 testem.json:test’emの構成ファイル。これについてはまもなく詳細に説明します。
- API/:REST API実装のフォルダー。
-
- API/HTACCESS:REST APIをサポートするApache Webサーバーのサンプル構成。
- API/TODOS.PHP:PHPコードREST APIを実装します。
- lib/backbone-min.js:backbone.js
- lib/chai.js:chai assertion briveral。
- lib/jquery-1.9.0.min.js:jqueryの削除バージョン。
- lib/sinon-1.5.2.js:sinon.jsライブラリ。
- lib/sinon-chai.js:sinon.js chaiのアサーション。
- lib/underscore-min.js:underscore.js
- mysql/:アプリケーション用のmysqlコードのフォルダー。
-
- PHP-LIB/:PHPライブラリのフォルダーと、アプリケーションのREST API用の構成。
- PHP-LIB/DBCONFIG.INC.PHP:REST APIのPHPデータベース構成
- src/:クライアント側のアプリケーションコードのフォルダー。
- src/app-todos.js:アプリケーション。
- テスト/:テストコードのフォルダー。
- test/app-todos-test.js:アプリケーションのテストコード。
-
- 開発中、これらのファイルのうち3つのファイルのみに関心があります。TESM.JSON、SRC/APP-TODOS.JS、およびTEST/APP-TODOSTEST.JS。
- test’em の構成
の開発を開始します
最後に、コーディングの準備が整いました。コマンドシェルで、プロジェクトのルートフォルダーに移動し、コマンドテストムを実行します。 Test’emスクリプトが実行され、端子ウィンドウがクリアされ、右上にURLが与えられます。そのURLを選択したブラウザにコピーして貼り付けてください。Webブラウザを起動するとすぐに、定義したテストを自動的に実行します。開発を開始したばかりなので、コードもテストケースもありません。ブラウザは、それを親切に指摘します
Test’emを起動した端子窓もステータスを与えます。

最初のテストケース
真のテスト駆動型開発の精神では、テスト/App-todos-test.jsファイルに最初のテストケースを記述することから始めます。他の優れたWebアプリと同様に、グローバルネームスペース汚染を最小限に抑えたいと考えています。そのためには、すべてのコードを含むために、単一のグローバル変数TODOAPPに依存します。最初のテストケースでは、グローバル名スペース変数が存在することを確認します。
<span>var sum = 2 + 2;</span>ご覧のとおり、MochaにChaiの主張を使用していることを伝えるために、1つの予備声明が必要です。その後、テストの作成を開始できます。コンベンションにより、JavaScriptテストはブロックに編成されます(サブブロックなどにネストできます)。各ブロックは、describe()関数呼び出しから始まり、テストしているコードのどの部分を識別します。この場合、アプリケーション全体をテストしているため、これが最初のパラメーターです()。
テストブロック内で、各テストケースをテストするもので文書化します。それがIT()関数の目的です。テストケースを読む方法は、describe()とit()文字列を単一のステートメントに結合することです。したがって、最初のテストケースは
ですアプリケーションは、名前空間のグローバル変数を作成します
ですテストコード自体はIT()ブロック内にあります。私たちのテストケースは
これで、完全なテストケースがあります。ファイルを保存するとすぐに、Test`EMが自動的に引き継ぎます。ファイルの1つが変更されたことに気付くため、すぐにテストを再実行します。当然のことながら(まだアプリケーションのコードを書いていないため)、最初のテストは失敗します。
assert<span>.equal(sum, 4, "sum should equal 4");</span>
端子ウィンドウも自動的に更新されます

ファイルを保存するとすぐに、テストは再び行動に陥ります。テストケースの最新の結果がすぐに表示されます

しばらく後退して、何が起こっているのかを考えてください!テストコードまたはアプリケーションのいずれかに変更を加えるたびに、Test`EMはすぐにテストスイート全体を再実行します。私たちがしなければならないのは、画面の隅にTest’emのブラウザまたは端子ウィンドウを表示できるようにすることです。リアルタイムでコードの健康状態を見ることができます。バグが作業している場所とは異なるコードの一部に現れても、バグを導入するとすぐにわかります。バグを導入した時期を把握するために、時間、数日、または数週間の新しいコードを掘り下げることはもうありません。
モデルのテスト
開発環境が完全に確立されたため、アプリケーションの開発を開始できます。私たちのアプリはTODOのリストを表示しているので、それらのTODOのモデルを作成することは良いかもしれません。モデルは、TODOのタイトルとそのステータスの両方を追跡する必要があります。合理的なデフォルトでTODOを作成できる検証を検証するユニットテストを追加しましょう。
<span>var sum = 2 + 2;</span>これらのテストには注目に値するいくつかの側面があります
互いにテストブロックをネストすることができます。 1つのテストブロックには、TODOモデルのすべてのユニットテストが含まれ、これらのテストのサブブロックは初期化に焦点を当てています。
- テストブロック内で、すべてのテスト前に実行する機能を定義できます。それが、Beforeeach()ブロックの目的です。上記の例では、すべてのテストの前にTODOの新しいインスタンスを作成しています。
- Mochaフレームワークは、JavaScriptコンテキスト(つまり、これの値)がすべてのテストケースで一貫していることを自動的に確認します。そのため、This.todoを1つの関数(beforeeach()パラメーター)で定義し、他の関数(IT()パラメーターなど)で安全に参照できます。 Mochaがこの一貫性を提供するために舞台裏で作業しなければ、JavaScriptは各関数の異なるコンテキストを定義します。
- もちろん、モデルコードをまだ作成していないため、すべてのテストが失敗します。 (そして、私たちはそれをすぐに知るでしょう。)しかし、モデルのコードを追加したら、テストが合格し、途中です。 サードパーティの機能にスタブを使用する
assert<span>.equal(sum, 4, "sum should equal 4");</span>各テストの前にいくつかの追加コードを含め、各テストの後に実行するコードのセクションを追加しました。その余分なコードは、コード内の別の関数を効果的に無効にする関数であるSinonスタブを管理します。この場合、スタブはthis.todoのsave()メソッドを無効にします。スタブを配置すると、メソッドへの呼び出しは実際にはBacknoneライブラリに移動しません。代わりに、シノンはそれらの呼び出しを傍受し、すぐに戻るだけです。この動作は重要です。ユニットテスト環境で実際のバックボーンSave()メソッドを実行しようとした場合、データベースまたはサーバーAPIが利用可能でないため、通話が失敗します。
スタブを所定の位置に配置すると、テストケースを使用してモデルの動作を検証できます。最初のテストケースでは、すぐにTODOのタイトルを新しい価値に設定しました。タイトルプロパティが変更されているため、モデルにバッキングストアを更新してもらいたいと考えています。スタブが呼び出されたことを単純に確認するために確認します。モデルをこれらのテストに合格させるために、変更イベントを探して適切に対応できます。
<span>var sum = 2 + 2;</span>ビューのテスト
もちろん、私たちのアプリは、実際にTODOをユーザーに表示せず、HTMLを作成する必要がある場合、誰も何の役にも立たないでしょう。その機能にはバックボーンビューを使用します。些細なアプリでは、各TODOをリスト項目としてレンダリングしたいだけです。これが私たちを始めさせるテストケースです。
2つのテストケースでビューのテストを開始します。まず、ビューのrender()メソッドがビュー自体を返すようにします。これは、メソッドチェーンを可能にするため、バックボーンで一般的で非常に便利な慣習です。 2番目のテストケースは、レンダリングが作成するHTML要素がリスト項目(
assert<span>.equal(sum, 4, "sum should equal 4");</span>
次に、そのリスト項目ビューの詳細なコンテンツを開発できます。例として、完全なリスト項目が次のように見えるようにしたい。
<span>expect(sum).to.equal(4);</span>テストケースでは、jqueryを利用して、ビューの主な要素から個々の要素を抽出できます。
最後のテストケースでは、モデルのsave()メソッドをスタブしたことに注意してください。プロパティをデフォルト値から変更しているため、モデルはその変更をバッキングストアに維持しようとします。ただし、ユニットテスト環境では、データベースやサーバーAPIはありません。スタブは、欠落しているコンポーネントの代わりになり、エラーなしでテストを続行できます。これらのテストを渡すには、ビューに追加のコードを追加する必要があります。
sum<span>.should.equal(4);</span>
テストモデル/表示相互作用を表示
CREATE TABLE `todos` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary key for the table.', `title` varchar(256) NOT NULL DEFAULT '' COMMENT 'The text for the todo item.', `complete` bit(1) NOT NULL DEFAULT b'0' COMMENT 'Boolean indicating whether or not the item is complete.', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='To Do items.'ビューの実装が適切なHTMLマークアップを作成することを確認したため、モデルとの相互作用をテストできます。特に、チェックボックスをクリックして、ユーザーがTODOのステータスを切り替えることができるようにします。私たちのテスト環境は実際の人間のユーザーを必要としないため、jQueryを使用してクリックイベントを生成します。ただし、そのためには、実際のライブDOMにコンテンツを追加する必要があります。そのコンテンツは、テスト
フィクスチャ
として知られています。これがユニットテストコードです。<span><span> </span><span><span><span> lang<span>="en"</span>></span> </span> <span><span><span>></span> </span> <span><span><span><meta> charset<span>="utf-8"</span>></span> </span> <span><span><span><title>></title></span><span><span></span>></span> </span> <span><span><span></span>></span> </span> <span><span><span>></span> </span> <span><span><span><h1 id="gt">></h1></span>List of Todos<span><span></span>></span> </span> <span><span><span><script> src<span >="lib/jquery-1.9.0.min.js"</script></span>></span><span><span></span>></span> </span> <span><span><span><script> src<span >="lib/underscore-min.js"</script></span>></span><span><span></span>></span> </span> <span><span><span><script> src<span >="lib/backbone-min.js"</script></span>></span><span><span></span>></span> </span> <span><span><span><script> src<span >="src/app-todos.js"</script></span>></span><span><span></span>></span> </span> <span><span><span><script>></script></span><span> </span></span><span><span> <span>$(function () { </span></span></span><span><span> <span>var todos = new todoApp<span>.Todos</span>(); </span></span></span><span><span> todos<span>.fetch(); </span></span></span><span><span> <span>var list = new todoApp<span>.TodosList</span>({collection: todos}); </span></span></span><span><span> <span>$("body").append(list.el); </span></span></span><span><span> <span>}) </span></span></span><span><span> </span><span><span></span>></span> </span> <span><span><span></span>></span> </span><span><span><span></span>></span></span></span></span></span></span></span></span></span></span>
再びTODOのSave()メソッドを突き刺していることに注意してください。それ以外の場合、バックボーンは、シミュレートされたクリックでTODOステータスを変更するときに、存在しないバッキングストアを更新しようとします。
テストケース自体については、フィクスチャのIDを使用して
<span>var sum = 2 + 2;</span>ビューでは、
コレクションのテスト
assert<span>.equal(sum, 4, "sum should equal 4");</span>
この時点で、アプリケーションはほぼ完了しています。残りの唯一の機能は、すべてのTODOを一緒に収集することです。当然、バックボーンコレクションを使用します。私たちは実際にコレクションで特別なことをするつもりはないので、ユニットテストは本当に必要ありません。
ただし、コレクションの見解の実装が適切であることを確認できます。そのビューは、順序付けられていないリスト(- )としてレンダリングされたいと考えています。テストケースは、これまで見たことのない機能を必要としません。
ビューの実装も簡単です。コレクションへの追加を追跡し、ビューを更新します。最初のrender()の場合、コレクション内のすべてのモデルを一度に1つずつ追加するだけです。
<span>expect(sum).to.equal(4);</span>
ボーナステスト:APIの検証
sum<span>.should.equal(4);</span>REST APIは、Backboneが期待するAPIと完全に一致するため、APIインタラクションを管理するためにカスタムコードは必要ありませんでした。その結果、ユニットテストのケースは必要ありません。現実の世界では、あなたはそれほど幸運ではないかもしれません。 APIがバックボーンコンベンションに準拠していない場合は、非標準のAPIに対処するためにバックボーンコードの一部をオーバーライドまたは拡張する必要がある場合があります。その余分なコードには、単体テストも必要です。幸いなことに、ユニットテスト環境であっても、APIの相互作用をテストするのは比較的簡単です。
API相互作用をテストする最も簡単な方法は、sinon.jsの偽のサーバー機能に依存しています。残念ながら、その機能は、Sinonのブラウザの実装でのみ(現在)利用可能です。 node.jsの実装から明示的に除外されています。 node.jsで実行するためのハックがいくつかありますが、これらのハッキングは非常に脆く、内部実装の詳細に依存しています。可能であれば避けるのが最善です。幸いなことに、Sinonの偽サーバーなしではうまくいくことができます
秘密は、バックボーンがjqueryの$ .ajax()関数に依存して、rest apisを実装することを知っていることです。その関数をスタブすることにより、API相互作用を傍受できます。関数をスタブするときは、独自の応答を置き換えたいと思うでしょう。 スタブのevelowsto()メソッドは、その機会をまったく与えてくれます。それは、スタブが呼び出されたときにどのような追加のアクションをとるべきかをシノンに伝えます。これは、REST APIを使用してコレクションが正しく初期化されていることを確認するための完全なテストケースです。
<span>var sum = 2 + 2;</span>終了!
次のスクリーンショットからわかるように、すべてのユニットテストケースに渡すコードを作成しました。少なくとも当面は、開発が完了しました。
統合中のテスト

アプリのクライアント側の開発が完了したため(そしてそれを証明するためのテストがあります)、JavaScriptをソースコード管理システムに安全に押し込むことができます。その後、アプリケーション全体のビルドプロセスに統合できます。そのプロセスの一環として、開発したすべてのテストケースを実行したいと考えています。これにより、最終展開を構成するコードが定義したすべてのテストに合格することが保証されます。また、新しいバグを誤って導入するコードの「マイナーな調整」から保護します。
ビルドプロセス中に、Webブラウザーではなくコマンドラインからテストを実行することをお勧めします。個々のテストケースの詳細は必要ありません。すべてが合格するという保証だけです。 node.jsは、この要件に対応するのに十分簡単になります。ソースコードおよびユニットテストコードファイルにいくつかの小さな追加を行う必要があります。 Node.jsは、Webブラウザーとは異なる方法でグローバル変数を処理するため、
コードがこれらの変更が必要です。 Webブラウザでは、JavaScript変数はデフォルトでグローバルな範囲です。一方、node.jsは、デフォルトで変数をローカルモジュールに限定します。その環境では、私たちのコードは必要なサードパーティのライブラリを見つけることができません(jquery、underscore、およびbackbone。最初に次の記述を追加すると、node.jsはこれらのライブラリへの参照を適切に解決します。また、テストコードを調整する必要があります。テストスクリプトでは、独自のライブラリ(jquery、chai、sinon.js、およびsinon-chai)にアクセスする必要があります。さらに、Webブラウザーのドキュメントオブジェクトモデル(DOM)をシミュレートするために、少し追加を追加する必要があります。クリック処理のためのテストでは、Webページに「フィクスチャ」
<span>var sum = 2 + 2;</span>これらのステートメントテストをラップして、Webブラウザーの代わりにnode.js環境で実行されているかどうかを確認する条件付き。ブラウザでは、追加のステートメントは必要ありませんので、安全にスキップできます。
これらの変更を使用すると、コマンドラインから完全なテストスイートを実行できます。プロジェクトのルートフォルダーに移動し、コマンドMochaを実行するだけです。結果は非常によく知られているように見えます。
もちろん、モカは出口レベルを返して、すべてのテストが合格したかどうかを示します。これにより、継続的な統合プロセスの一部として、または単に独自の正気を維持するためのローカルプリコミットスクリプトとしてテストを自動化できます。
結論
この時点で、私たちは目標を達成しました。開発中にバックグラウンドで実行されるユニットテスト環境があり、テストが失敗したときにすぐに通知します。テストはWebブラウザで実行され、コーディング中にブラウザの開発ツールに完全にアクセスできます。同じテストもコマンドラインスクリプトから等しく実行されるため、ビルドまたは統合プロセス中に実行を自動化できます。
リソースこれが記事で使用されている主要なテストリソースです。
コマンドラインjavaScript実行環境:node.js
javaScript単体テストフレームワーク:mocha
- テスト開発環境:test’em
- JavaScript Assertion Library:Chai Assertion Library
- スパイ、スタブ、および模擬:sinon.js
- 追加のアサーション:sinon.js chai
- のアサーション
- backbone.jsアプリケーションの単体テストに関するよくある質問(FAQ)
- backbone.jsアプリケーションでの単体テストの重要性は何ですか?
backbone.jsのユニットテストは、他のjavascriptフレームワークと比較してどのように比較されますか?
backbone.jsは、他のJavaScriptフレームワークと同様に、アプリケーションの品質を確保するための単体テストをサポートします。ただし、Backbone.jsは、柔軟性とシンプルさのために際立っています。アプリケーションをどのように構成すべきかを決定することはなく、開発者は適切と思われるアプリケーションを自由に設計することができます。この柔軟性は単体テストにまで及び、開発者が好みのテストツールと方法論を選択できるようになります。さらに、Backbone.jsは他のフレームワークと比較してフットプリントが小さく、単体テストのために高速かつ効率的になります。 Backbone.jsでの単体テストに利用できるいくつかのツールです。人気のあるものには、Mocha、Jasmine、Jestが含まれます。 Mochaは、開発者にアプリケーションをテストする簡単な方法を開発者に提供する機能が豊富なJavaScriptテストフレームワークです。 Jasmineは、JavaScriptコードをテストするための行動主導の開発フレームワークです。ブラウザ、DOM、またはJavaScriptフレームワークに依存していないため、BackBone.jsアプリケーションのテストに最適です。一方、Jestは、大規模なWebアプリケーションのシンプルさとサポートに焦点を当てた包括的なテストソリューションです。 Backbone.jsアプリケーションのテストには、アプリケーションの各コンポーネントのテストケースの作成が含まれます。これには、モデル、ビュー、コレクションが含まれます。各テストケースは、コンポーネントの特定の機能をカバーし、他のテストケースとは無関係である必要があります。 MochaやJasmineなどのテストフレームワークを使用して、テストを作成できます。これらのフレームワークは、テストケースを定義し、テスト環境をセットアップおよび解体し、アサーションを作成する機能を提供します。 JSは、使用しているテストフレームワークに依存します。たとえば、Mochaを使用している場合は、Mochaコマンドラインツールを使用してテストを実行できます。ジャスミンを使用している場合は、ジャスミンコマンドラインツールを使用してテストを実行できます。これらのツールは、個々のテストケース、テストスイート全体、またはアプリケーション内のすべてのテストを実行するオプションを提供します。また、渡され、失敗し、スキップされたテストの数など、テストの結果に関する詳細なレポートを提供します。 Backbone.jsでユニットテストを自動化します。自動化には、コードが変更されるたびにテストを自動的に実行する継続的な統合(CI)システムのセットアップが含まれます。これにより、変更によって導入されたバグがすぐにキャッチされます。 JavaScriptをサポートし、Backbone.jsの単体テストを自動化するために使用できるJenkins、Travis CI、Circleciなど、いくつかのCIツールが利用可能です。
以上がバックボーンのユニットテスト。JSアプリケーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

WebStorm Mac版
便利なJavaScript開発ツール
