<rt id="cjffw"></rt>><\/span>\n<\/span> ><\/span>List of Todos<\/h1<\/span>><\/span>\n<\/span>\n

亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目次
キーテイクアウト
テストフレームワーク
アサーションライブラリ
最初のテストケース
モデルのテスト
コマンドラインjavaScript実行環(huán)境:node.js
backbone.jsのユニットテストは、他のjavascriptフレームワークと比較してどのように比較されますか?
ホームページ ウェブフロントエンド jsチュートリアル バックボーンのユニットテスト。JSアプリケーション

バックボーンのユニットテスト。JSアプリケーション

Feb 24, 2025 am 09:38 AM

バックボーンのユニットテスト。JSアプリケーション

何時間も過ごした後、タッチしなかった部分は、恐ろしく不幸になりました。これで、既存のコードをどのように壊したかを把握しようとするために、作業(yè)の日々をバックトラックするという課題に直面しています。幸せな日は間違いなく再びここにありません。 そのまさにシナリオが私が認(rèn)めたい以上に私を噛んだ。そして、あなたがしばらくコーディングしているなら、おそらくあなたもそれを見たことがあるでしょう。ただし、このシナリオを非常に苦痛にしている理由を考えてみましょう。新しいコードが既存のコードを破ったためではありません。それは開発では避けられません。本當(dāng)の痛みは、破損に気付くのに時間がかかったことです。アプリケーションが機能していることを知って以來、非常に多くの開発があるため、バグが隠れている可能性のあるコードが大量にあります。そして、それは干し草の山で針を狩るようなように思えるかもしれませんが、私たちはそれを潛るしかありません。 この記事では、JavaScript開発からこのシナリオを本當(dāng)に追放するつもりです。針を探しているコードの數(shù)時間、數(shù)日、または數(shù)週間を掘ることはもうありません。私たちが採用する原則は簡単なものです。

を作成するとすぐにバグを見つけます。それは正しい;バグを?qū)毪工毳畅`ドを作成するときにすぐにわかります。さらに、私たちがプロセスに費やした余分な努力は、初期開発が完了すると無駄になりません。開発バグをキャッチするのと同じテストコードは、統(tǒng)合環(huán)境で完全に再利用可能になります。テストをソースコード管理システムに簡単に組み込むことができ、コードベースに入る前にバグをブロックできます。

次の4つのセクションでは、まずJavaScriptテスト環(huán)境に必要なツールを調(diào)べます。次に、理解するのに十分なシンプルなアプリケーションを検討しますが、実際の制作Webアプリケーションに存在する可能性のあるすべての機能と機能を備えています。最後の2つのセクションでは、開発中に環(huán)境を使用してサンプルアプリをテストする方法を示しています。

キーテイクアウト

    開発中の早期のバグ検出を強調(diào)して、後の段階で複雑な問題を防ぎ、スムーズなコーディングエクスペリエンスを確保し、バックトラッキングを最小限に抑えます。
  • ブラウザーとnode.js環(huán)境の両方との互換性のため、Mochaをコアテストフレームワークとして利用して、開発から統(tǒng)合テストへのシームレスな移行を可能にします。
  • CHAIアサーションライブラリを組み込み、テストの読みやすさと柔軟性を高め、さまざまな開発者の好みに応える複數(shù)のスタイル(アサート、期待、すべき)を提供します。
  • スパイ、スタブ、モックを作成するためにSinon.jsを使用します。これらは、外部ライブラリやサービスとの相互作用をテストするために不可欠です。
  • Test’emを使用して継続的なテスト環(huán)境を設(shè)定して、コードの変更時にテストを自動的に実行し、アプリケーションの健康に関する即時フィードバックを提供します。
  • 開発中に、モデル、ビュー、およびコレクションの詳細な単體テストの作成に焦點を當(dāng)て、各コンポーネントが単獨で正しく機能するようにします。
  • node.jsでコマンドライン実行のためにユニットテストを適応させることにより、統(tǒng)合テストにスムーズに移行し、生産環(huán)境でアプリケーションが期待どおりに動作するようにします。
  • JavaScriptテスト環(huán)境のアセンブリ
  • nirvanaの単體テストには、ワークベンチにない可能性のある開発ツールが必要です(まだ)。ニュースは、良い面と悪い面でも、オプションがたくさんあるということです。それは私たちに選択肢を與えてくれるので朗報です。そして、今日のフロントエンド開発のペースはあまりにも多くの選択肢があることを意味するので、それは悪いニュースです。評価に焦點を當(dāng)てるために、トップ2の目標(biāo)について明確にしましょう。他のすべては二次的です:
  1. 私たちの環(huán)境は、開発中の摩擦のない継続的なテストをサポートする必要があります 開発中に作成されたテストは、統(tǒng)合で等しく使用できる必要があります。
  2. 実行環(huán)境
JavaScriptコーディングの場合、最新のWebブラウザーほど開発環(huán)境はありません。あなたの味がF(xiàn)ireBugであろうとWebKitの開発者ツールであろうと、ブラウザはライブDOM検査と編集、完全なインタラクティブなデバッグ、洗練されたパフォーマンス分析をサポートしています。 Webブラウザーは開発に最適なため、テストツールと環(huán)境はブラウザ內(nèi)の開発と統(tǒng)合する必要があります。ただし、Webブラウザは統(tǒng)合テストにはそれほど優(yōu)れていません。統(tǒng)合テストは、多くの場合、クラウドのどこか(または少なくともデータセンターのどこか)のどこか)でサーバーで行われます。これらのシステムには、グラフィカルなユーザーインターフェイスさえありません。最新のWebブラウザーはそれほど少ない。効率的な統(tǒng)合テストには、簡単なコマンドラインスクリプトとそれらをサポートするJavaScript実行環(huán)境が必要です。これらの要件については、選択のツールはnode.jsです。他のコマンドラインJavaScript環(huán)境はありますが、node.jsに一致するサポートの幅と深さの深さはありません。統(tǒng)合段階では、テストツールはnode.jsと統(tǒng)合する必要があります。

テストフレームワーク

テストツールは、Webブラウザーとnode.js環(huán)境の両方をサポートする必要があることを確認(rèn)したため、コアテストフレームワークを選択するのに十分な選択肢を絞り込むことができます。多くのJavaScriptテストフレームワークが存在しますが、ほとんどはブラウザーテストに大きく偏っています。通常、node.jsで動作させることは通常可能ですが、多くの場合、無力なハックまたは調(diào)整が必要です。この問題に苦しんでいないフレームワークの1つはモカです。

Mochaは、ノードとブラウザで実行されている機能が豊富なJavaScriptテストフレームワークであり、非同期テストをシンプルで楽しくします。

node.js用に開発されたMochaは、Webブラウザーも容易にサポートするために拡張されました。 Mochaをテストフレームワークとして使用することにより、変更なしで開発と統(tǒng)合の両方をサポートするテストを作成できます。

アサーションライブラリ

いくつかのJavaScriptテストフレームワークとは異なり、Mochaは柔軟性を最大限に活用できるように設(shè)計されています。結(jié)果として、それを完成させるには、いくつかの追加作品を選択する必要があります。特に、JavaScriptアサーションライブラリが必要です。そのために、Chai Assertion Libraryに依存します。 Chaiは、すべての一般的なアサーションスタイルをサポートするという點でややユニークです。コード。カバーの下では、それらはすべて同等です。テストを1つのアサーションスタイルからもう1つのテストに翻訳するのは簡単です。アサーションスタイルの主な違いは、読みやすさです。アサーションスタイルの選択は、主にあなた(またはあなたのチーム)が最も読みやすいスタイルと、どのスタイルが最も理解できるテストを生成するかに依存します。違いを確認(rèn)するには、次のコードの些細なテストの開発を検討してください。 従來のアサートスタイルのテストは、次のように記述できます そのテストは仕事を終了しますが、古い學(xué)校の単體テストに慣れていない限り、読んで解釈するのは少し難しいでしょう。代替のアサーションスタイルでは、を使用します ほとんどの開発者は、アサートスタイルのテストよりも読みや理解が容易になると予想されるスタイルのアサーションを見つけます。 3番目の選択肢は、テストアサーションを自然言語のようにさらに行う必要があります:

<span>var sum = 2 + 2;</span>

Chaiライブラリは、3つのアサーションスタイルすべてをサポートしています。この記事では、

に固執(zhí)します スパイ、スタブ、および模擬
assert<span>.equal(sum, 4, "sum should equal 4");</span>
この記事で考慮する些細な例を含む

ほとんどのWebアプリは、サードパーティの図書館とサービスに依存しています。多くの場合、コードをテストするには、それらのライブラリやサービスを観察する、または制御する必要があります。 Sinon.JSライブラリは、これらの相互作用をテストするための多くのツールを提供しています。このようなツールは、3つの一般的なクラスに分類されます

<span>expect(sum).to.equal(4);</span>

spy

。テスト中のコードの外側(cè)の機能への呼び出しを観察するテストコード。スパイは、これらの外部機能の動作を妨害しません。彼らは単に呼び出しと返品値を記録するだけです
sum<span>.should.equal(4);</span>

stub

。テスト中のコードの外側(cè)の機能を呼び出すためのテストコード。スタブコードは、外部関數(shù)を再現(xiàn)しようとはしません。テスト下のコードが外部関數(shù)にアクセスすると、未解決のエラーを防ぎます。

mock

。テスト中のコード外で機能またはサービスを模倣するテストコード。モックを使用すると、テストコードはそれらの関數(shù)またはサービスからの返品値を指定して、コードの応答を確認(rèn)できるようにします。

単體テストの開発環(huán)境

テストワークベンチの最終ツールは、ユニットテストの開発環(huán)境です。この例では、test’emを使用します。 Test’emは、連続テスト環(huán)境を設(shè)定および実行するための便利なスクリプトのコレクションです。選択した場合、スクリプトを自分で書いて、環(huán)境を手動で管理することができます。しかし、Toby Ho(Test’emの作成者)は、私たちにトラブルを救うことができる素晴らしいパッケージをまとめました。

サンプルアプリケーション

テスト環(huán)境が動作していることを確認(rèn)するには、簡単なアプリケーションを考えてみましょう。このアプリケーションには、その裸の必需品には偏っていますが、実際のアプリケーションに必要なすべての機能が含まれています。 (アプリケーションの完全なソースコードはGitHubで入手できます。)

バックボーンのユニットテスト。JSアプリケーションユーザーはTODOのリストを表示でき、チェックボックスをクリックしてTODOのステータスを切り替えることができます。

TODOSデータベース

アプリケーションは、TODOの情報を保持するデータベーステーブルから始まります。このテーブルを作成するために使用できるSQLは次のとおりです。

そして、テーブルがテストデータを入れた後のテーブルがどのように見えるかを次に示します。

<span>var sum = 2 + 2;</span>

id

title 完了 データベースのサンプルTODOアイテム 2つのサンプルTODOアイテム1 3yet別のサンプルtodo item0 テーブルが示すように、私たちのTODOには、プライマリキー(ID)、タイトル、およびステータスビットのみが含まれており、それらが完全であるかどうかを示します。 a est api

當(dāng)社のWebアプリケーションにはこのデータベースへのアクセスが必要なため、標(biāo)準(zhǔn)のRESTインターフェイスを提供します。 APIはRubyコンベンションに従いますが、サーバーテクノロジーによって簡単に実裝できます。特に:

get api/todosは、データベース內(nèi)のすべての行のJSONエンコードされた配列を返します。

get api/todos/nnnは、nnnに等しいIDを持つtodoのJSON表現(xiàn)を返します。

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に実裝するのに十分なほど簡単ですが、はるかに大きな計畫があります。小さいかもしれませんが、最終的にはアプリは驚くべき機能と楽しいユーザーインターフェイスを備えています。その日に備えて、究極のキラーアプリをサポートできるフレームワークの上に構(gòu)築します:
    • jquery dom操作、イベント処理、サーバー通信のための。
    • underscore.js多くの不可解なユーティリティを使用してコア言語を強化します。
    • backbone.jsモデルとビューの観點からアプリケーションの構(gòu)造を定義する。
    htmlスケルトン

    アプリケーションを構(gòu)成するコンポーネントがわかったので、それをサポートするHTMLスケルトンを定義できます。 (まだ)派手なものはありません(まだ)、最小限のHTML5ドキュメント、いくつかのJavaScriptファイル、そして物事を開始するための小さなコード。

    開発中のテスト

<span>var sum = 2 + 2;</span>

ツールを選択し、アプリケーションを指定したので、開発を開始する時が來ました。最初のタスクはツールのインストールです

ツールのインストール

ブラウザで開発する場合でも、テスト環(huán)境はnode.jsに依存しています。したがって、最初のステップは、node.jsとノードパッケージマネージャー(NPM)のインストールです。 Node.js Webサイトには、OS X、Windows、Linux、Sunos用の実行可能バイナリ、および他のオペレーティングシステムのソースコードがあります。インストーラーを?qū)g行した後、コマンドラインからnode.jsとnpmの両方を確認(rèn)できます。

必要なものはすべて、ノードパッケージとして便利に利用できます。ノードパッケージマネージャーは、インストールと依存関係を処理できます。

プロジェクト構(gòu)造の作成
assert<span>.equal(sum, 4, "sum should equal 4");</span>
この例のソースコードには、次の15のファイルを備えた完全なプロジェクト構(gòu)造が含まれています。

各フォルダーとファイルに含まれるものは次のとおりです
  • todos.html:アプリケーション用のスケルトンHTMLファイル、上に完全に示されています。
  • testem.json:test’emの構(gòu)成ファイル。これについてはまもなく詳細に説明します。
  • API/:REST API実裝のフォルダー。
    • API/HTACCESS:REST APIをサポートするApache Webサーバーのサンプル構(gòu)成。
    • API/TODOS.PHP:PHPコードREST APIを?qū)g裝します。
    lib/:アプリ自體とテストフレームワークで使用されるJavaScriptライブラリのフォルダー。
  • 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コードのフォルダー。
    mysql/todos.sql:mysqlコマンドでアプリケーションデータベースを作成します
    • PHP-LIB/:PHPライブラリのフォルダーと、アプリケーションのREST API用の構(gòu)成。
    • PHP-LIB/DBCONFIG.INC.PHP:REST APIのPHPデータベース構(gòu)成
  • src/:クライアント側(cè)のアプリケーションコードのフォルダー。
    • src/app-todos.js:アプリケーション。
  • テスト/:テストコードのフォルダー。
    • test/app-todos-test.js:アプリケーションのテストコード。
    test/mocha.opts:mochaの構(gòu)成オプション。これについては、次のセクションで説明します
    • 開発中、これらのファイルのうち3つのファイルのみに関心があります。TESM.JSON、SRC/APP-TODOS.JS、およびTEST/APP-TODOSTEST.JS。
    • test’em
    • の構(gòu)成
    実際の開発前の最後のステップは、Test’em構(gòu)成の定義です。その構(gòu)成はJSON形式のtestem.jsonにあり、あらゆるテキストエディターで作成するのに十分なシンプルです。 Mochaを使用していることを指定し(Test’emはいくつかのフレームワークをサポートしています)、JavaScriptファイルをアプリケーションとテストコードが必要とします。

の開発を開始します

最後に、コーディングの準(zhǔn)備が整いました。コマンドシェルで、プロジェクトのルートフォルダーに移動し、コマンドテストムを?qū)g行します。 Test’emスクリプトが実行され、端子ウィンドウがクリアされ、右上にURLが與えられます。そのURLを選択したブラウザにコピーして貼り付けてください。

Webブラウザを起動するとすぐに、定義したテストを自動的に実行します。開発を開始したばかりなので、コードもテストケースもありません。ブラウザは、それを親切に指摘します

Test’emを起動した端子窓もステータスを與えます。バックボーンのユニットテスト。JSアプリケーション

最初のテストケース

真のテスト駆動型開発の精神では、テスト/App-todos-test.jsファイルに最初のテストケースを記述することから始めます。他の優(yōu)れたWebアプリと同様に、グローバルネームスペース汚染を最小限に抑えたいと考えています。そのためには、すべてのコードを含むために、単一のグローバル変數(shù)TODOAPPに依存します。最初のテストケースでは、グローバル名スペース変數(shù)が存在することを確認(rèn)します。

<span>var sum = 2 + 2;</span>
ご覧のとおり、MochaにChaiの主張を使用していることを伝えるために、1つの予備聲明が必要です。その後、テストの作成を開始できます。コンベンションにより、JavaScriptテストはブロックに編成されます(サブブロックなどにネストできます)。各ブロックは、describe()関數(shù)呼び出しから始まり、テストしているコードのどの部分を識別します。この場合、アプリケーション全體をテストしているため、これが最初のパラメーターです()。

テストブロック內(nèi)で、各テストケースをテストするもので文書化します。それがIT()関數(shù)の目的です。テストケースを読む方法は、describe()とit()文字列を単一のステートメントに結(jié)合することです。したがって、最初のテストケースは

です

アプリケーションは、名前空間のグローバル変數(shù)を作成します

テストコード自體はIT()ブロック內(nèi)にあります。私たちのテストケースは
です

これで、完全なテストケースがあります。ファイルを保存するとすぐに、Test`EMが自動的に引き継ぎます。ファイルの1つが変更されたことに気付くため、すぐにテストを再実行します。當(dāng)然のことながら(まだアプリケーションのコードを書いていないため)、最初のテストは失敗します。
assert<span>.equal(sum, 4, "sum should equal 4");</span>

端子ウィンドウも自動的に更新されます

バックボーンのユニットテスト。JSアプリケーションテストパスを行うには、グローバル名スペース変數(shù)を作成する必要があります。 srcapp-todos.jsファイルにシフトし、必要なコードを追加します。

ファイルを保存するとすぐに、テストは再び行動に陥ります。テストケースの最新の結(jié)果がすぐに表示されます バックボーンのユニットテスト。JSアプリケーション

しばらく後退して、何が起こっているのかを考えてください!テストコードまたはアプリケーションのいずれかに変更を加えるたびに、Test`EMはすぐにテストスイート全體を再実行します。私たちがしなければならないのは、畫面の隅にTest’emのブラウザまたは端子ウィンドウを表示できるようにすることです。リアルタイムでコードの健康狀態(tài)を見ることができます。バグが作業(yè)している場所とは異なるコードの一部に現(xiàn)れても、バグを?qū)毪工毪趣工挨摔铯辘蓼埂%啸挨驅(qū)毪筏繒r期を把握するために、時間、數(shù)日、または數(shù)週間の新しいコードを掘り下げることはもうありません。

モデルのテスト

開発環(huán)境が完全に確立されたため、アプリケーションの開発を開始できます。私たちのアプリはTODOのリストを表示しているので、それらのTODOのモデルを作成することは良いかもしれません。モデルは、TODOのタイトルとそのステータスの両方を追跡する必要があります。合理的なデフォルトでTODOを作成できる検証を検証するユニットテストを追加しましょう。

<span>var sum = 2 + 2;</span>
これらのテストには注目に値するいくつかの側(cè)面があります

互いにテストブロックをネストすることができます。 1つのテストブロックには、TODOモデルのすべてのユニットテストが含まれ、これらのテストのサブブロックは初期化に焦點を當(dāng)てています。
    テストブロック內(nèi)で、すべてのテスト前に実行する機能を定義できます。それが、Beforeeach()ブロックの目的です。上記の例では、すべてのテストの前にTODOの新しいインスタンスを作成しています。
  • Mochaフレームワークは、JavaScriptコンテキスト(つまり、これの値)がすべてのテストケースで一貫していることを自動的に確認(rèn)します。そのため、This.todoを1つの関數(shù)(beforeeach()パラメーター)で定義し、他の関數(shù)(IT()パラメーターなど)で安全に參照できます。 Mochaがこの一貫性を提供するために舞臺裏で作業(yè)しなければ、JavaScriptは各関數(shù)の異なるコンテキストを定義します。
  • もちろん、モデルコードをまだ作成していないため、すべてのテストが失敗します。 (そして、私たちはそれをすぐに知るでしょう。)しかし、モデルのコードを追加したら、テストが合格し、途中です。
  • サードパーティの機能にスタブを使用する
TODOの単純なモデルができたので、その動作を定義し始めることができます。モデルがすべきことの1つは、そのプロパティが変更されるたびにデータベースを更新することです。ただし、ユニットテスト環(huán)境では、実際のデータベースを確認(rèn)することはありません。一方、データベースの更新を?qū)g行するコードを?qū)g際に記述しているわけではありません。むしろ、その相互作用を処理するためにバックボーンに依存しています。これは、このテストケースの単體テスト戦略を示唆しています。知っておく必要があるのは、バックボーンモデルがSave()メソッドを使用して、バッキングストアがモデルを持続しているものを更新することです。私たちの場合、バッキングストアがデータベースです。これが使用できるユニットテストコードです:

assert<span>.equal(sum, 4, "sum should equal 4");</span>
各テストの前にいくつかの追加コードを含め、各テストの後に実行するコードのセクションを追加しました。その余分なコードは、コード內(nèi)の別の関數(shù)を効果的に無効にする関數(shù)であるSinonスタブを管理します。この場合、スタブはthis.todoのsave()メソッドを無効にします。スタブを配置すると、メソッドへの呼び出しは実際にはBacknoneライブラリに移動しません。代わりに、シノンはそれらの呼び出しを傍受し、すぐに戻るだけです。この動作は重要です。ユニットテスト環(huán)境で実際のバックボーンSave()メソッドを?qū)g行しようとした場合、データベースまたはサーバーAPIが利用可能でないため、通話が失敗します。

スタブを所定の位置に配置すると、テストケースを使用してモデルの動作を検証できます。最初のテストケースでは、すぐにTODOのタイトルを新しい価値に設(shè)定しました。タイトルプロパティが変更されているため、モデルにバッキングストアを更新してもらいたいと考えています。スタブが呼び出されたことを単純に確認(rèn)するために確認(rèn)します。モデルをこれらのテストに合格させるために、変更イベントを探して適切に対応できます。

<span>var sum = 2 + 2;</span>
ビューのテスト

もちろん、私たちのアプリは、実際にTODOをユーザーに表示せず、HTMLを作成する必要がある場合、誰も何の役にも立たないでしょう。その機能にはバックボーンビューを使用します。些細なアプリでは、各TODOをリスト項目としてレンダリングしたいだけです。これが私たちを始めさせるテストケースです。

2つのテストケースでビューのテストを開始します。まず、ビューのrender()メソッドがビュー自體を返すようにします。これは、メソッドチェーンを可能にするため、バックボーンで一般的で非常に便利な慣習(xí)です。 2番目のテストケースは、レンダリングが作成するHTML要素がリスト項目(
  • )であることを確認(rèn)します。これらのテストに合格するために必要なコードは、簡単なバックボーンビューです。
    assert<span>.equal(sum, 4, "sum should equal 4");</span>

    次に、そのリスト項目ビューの詳細なコンテンツを開発できます。例として、完全なリスト項目が次のように見えるようにしたい。

    <span>expect(sum).to.equal(4);</span>
    テストケースでは、jqueryを利用して、ビューの主な要素から個々の要素を抽出できます。

    最後のテストケースでは、モデルのsave()メソッドをスタブしたことに注意してください。プロパティをデフォルト値から変更しているため、モデルはその変更をバッキングストアに維持しようとします。ただし、ユニットテスト環(huán)境では、データベースやサーバー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マークアップを作成することを確認(rèn)したため、モデルとの相互作用をテストできます。特に、チェックボックスをクリックして、ユーザーがTODOのステータスを切り替えることができるようにします。私たちのテスト環(huán)境は実際の人間のユーザーを必要としないため、jQueryを使用してクリックイベントを生成します。ただし、そのためには、実際のライブDOMにコンテンツを追加する必要があります。そのコンテンツは、テスト

    フィクスチャ

    として知られています。これがユニットテストコードです。
    <span><span><!DOCTYPE html></span>
    </span><span><span><span><html</span> lang<span>="en"</span>></span>
    </span>  <span><span><span><head</span>></span>
    </span>    <span><span><span><meta</span> charset<span>="utf-8"</span>></span>
    </span>    <span><span><span><title</span>></span><span><span></title</span>></span>
    </span>  <span><span><span></head</span>></span>
    </span>  <span><span><span><body</span>></span>
    </span>    <span><span><span><h1</span>></span>List of Todos<span><span></h1</span>></span>
    </span>
        <span><span><span><script</span> src<span>="lib/jquery-1.9.0.min.js"</span>></span><span><span></script</span>></span>
    </span>    <span><span><span><script</span> src<span>="lib/underscore-min.js"</span>></span><span><span></script</span>></span>
    </span>    <span><span><span><script</span> src<span>="lib/backbone-min.js"</span>></span><span><span></script</span>></span>
    </span>    <span><span><span><script</span> src<span>="src/app-todos.js"</span>></span><span><span></script</span>></span>
    </span>    <span><span><span><script</span>></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></script</span>></span>
    </span>  <span><span><span></body</span>></span>
    </span><span><span><span></html</span>></span></span>

    再びTODOのSave()メソッドを突き刺していることに注意してください。それ以外の場合、バックボーンは、シミュレートされたクリックでTODOステータスを変更するときに、存在しないバッキングストアを更新しようとします。

    テストケース自體については、フィクスチャのIDを使用して

    要素を作成することから始め、ライブドキュメントにその要素を追加します。この場合、ライブドキュメントは、テストの結(jié)果を表示するWebページです。テストケースを確認(rèn)した直後に要素を削除しますが、モカのテスト結(jié)果の表示に干渉しないように、表示プロパティを表示しないように設(shè)定します。この機能を?qū)g裝するコードには、TODOモデルへの小さな追加が含まれます。追加は、新しいTogglestatus()メソッドです
    <span>var sum = 2 + 2;</span>
    ビューでは、要素のクリックイベントをキャッチし、このメソッドをモデルに呼び出します。

    コレクションのテスト

    assert<span>.equal(sum, 4, "sum should equal 4");</span>

    この時點で、アプリケーションはほぼ完了しています。殘りの唯一の機能は、すべてのTODOを一緒に収集することです。當(dāng)然、バックボーンコレクションを使用します。私たちは実際にコレクションで特別なことをするつもりはないので、ユニットテストは本當(dāng)に必要ありません。

    ただし、コレクションの見解の実裝が適切であることを確認(rèn)できます。そのビューは、順序付けられていないリスト(
      )としてレンダリングされたいと考えています。テストケースは、これまで見たことのない機能を必要としません。

      ビューの実裝も簡単です。コレクションへの追加を追跡し、ビューを更新します。最初のrender()の場合、コレクション內(nèi)のすべてのモデルを一度に1つずつ追加するだけです。
    <span>expect(sum).to.equal(4);</span>

    ボーナステスト:APIの検証

    sum<span>.should.equal(4);</span>
    REST APIは、Backboneが期待するAPIと完全に一致するため、APIインタラクションを管理するためにカスタムコードは必要ありませんでした。その結(jié)果、ユニットテストのケースは必要ありません?,F(xiàn)実の世界では、あなたはそれほど幸運ではないかもしれません。 APIがバックボーンコンベンションに準(zhǔn)拠していない場合は、非標(biāo)準(zhǔn)のAPIに対処するためにバックボーンコードの一部をオーバーライドまたは拡張する必要がある場合があります。その余分なコードには、単體テストも必要です。幸いなことに、ユニットテスト環(huán)境であっても、APIの相互作用をテストするのは比較的簡単です。

    API相互作用をテストする最も簡単な方法は、sinon.jsの偽のサーバー機能に依存しています。殘念ながら、その機能は、Sinonのブラウザの実裝でのみ(現(xiàn)在)利用可能です。 node.jsの実裝から明示的に除外されています。 node.jsで実行するためのハックがいくつかありますが、これらのハッキングは非常に脆く、內(nèi)部実裝の詳細に依存しています??赡埭扦ⅳ欷斜埭堡毪韦钌皮扦?。幸いなことに、Sinonの偽サーバーなしではうまくいくことができます

    秘密は、バックボーンがjqueryの$ .ajax()関數(shù)に依存して、rest apisを?qū)g裝することを知っていることです。その関數(shù)をスタブすることにより、API相互作用を傍受できます。関數(shù)をスタブするときは、獨自の応答を置き換えたいと思うでしょう。 スタブのevelowsto()メソッドは、その機會をまったく與えてくれます。それは、スタブが呼び出されたときにどのような追加のアクションをとるべきかをシノンに伝えます。これは、REST APIを使用してコレクションが正しく初期化されていることを確認(rèn)するための完全なテストケースです。

    <span>var sum = 2 + 2;</span>
    終了!

    次のスクリーンショットからわかるように、すべてのユニットテストケースに渡すコードを作成しました。少なくとも當(dāng)面は、開発が完了しました。

    統(tǒng)合中のテストバックボーンのユニットテスト。JSアプリケーション

    アプリのクライアント側(cè)の開発が完了したため(そしてそれを証明するためのテストがあります)、JavaScriptをソースコード管理システムに安全に押し込むことができます。その後、アプリケーション全體のビルドプロセスに統(tǒng)合できます。そのプロセスの一環(huán)として、開発したすべてのテストケースを?qū)g行したいと考えています。これにより、最終展開を構(gòu)成するコードが定義したすべてのテストに合格することが保証されます。また、新しいバグを誤って導(dǎo)入するコードの「マイナーな調(diào)整」から保護します。

    ビルドプロセス中に、Webブラウザーではなくコマンドラインからテストを?qū)g行することをお勧めします。個々のテストケースの詳細は必要ありません。すべてが合格するという保証だけです。 node.jsは、この要件に対応するのに十分簡単に??なります。ソースコードおよびユニットテストコードファイルにいくつかの小さな追加を行う必要があります。 Node.jsは、Webブラウザーとは異なる方法でグローバル変數(shù)を処理するため、

    コードがこれらの変更が必要です。 Webブラウザでは、JavaScript変數(shù)はデフォルトでグローバルな範(fàn)囲です。一方、node.jsは、デフォルトで変數(shù)をローカルモジュールに限定します。その環(huán)境では、私たちのコードは必要なサードパーティのライブラリを見つけることができません(jquery、underscore、およびbackbone。最初に次の記述を追加すると、node.jsはこれらのライブラリへの參照を適切に解決します。

    また、テストコードを調(diào)整する必要があります。テストスクリプトでは、獨自のライブラリ(jquery、chai、sinon.js、およびsinon-chai)にアクセスする必要があります。さらに、Webブラウザーのドキュメントオブジェクトモデル(DOM)をシミュレートするために、少し追加を追加する必要があります。クリック処理のためのテストでは、Webページに「フィクスチャ」

    を一時的に追加する必要があることを思い出してください。もちろん、node.jsは通常、Webページを持っていません。ただし、JSDOMノードパッケージを使用すると、エミュレートできます。以下のコードは、テスト用に最小限のシミュレートされたWebページを作成します。
    <span>var sum = 2 + 2;</span>
    これらのステートメントテストをラップして、Webブラウザーの代わりにnode.js環(huán)境で実行されているかどうかを確認(rèn)する條件付き。ブラウザでは、追加のステートメントは必要ありませんので、安全にスキップできます。

    これらの変更を使用すると、コマンドラインから完全なテストスイートを?qū)g行できます。プロジェクトのルートフォルダーに移動し、コマンドMochaを?qū)g行するだけです。結(jié)果は非常によく知られているように見えます。

    もちろん、モカは出口レベルを返して、すべてのテストが合格したかどうかを示します。これにより、継続的な統(tǒng)合プロセスの一部として、または単に獨自の正気を維持するためのローカルプリコミットスクリプトとしてテストを自動化できます。

    結(jié)論バックボーンのユニットテスト。JSアプリケーション

    この時點で、私たちは目標(biāo)を達成しました。開発中にバックグラウンドで実行されるユニットテスト環(huán)境があり、テストが失敗したときにすぐに通知します。テストはWebブラウザで実行され、コーディング中にブラウザの開発ツールに完全にアクセスできます。同じテストもコマンドラインスクリプトから等しく実行されるため、ビルドまたは統(tǒng)合プロセス中に実行を自動化できます。

    リソース

    これが記事で使用されている主要なテストリソースです。

    コマンドラインjavaScript実行環(huán)境:node.js

    javaScript単體テストフレームワーク:mocha

      テスト開発環(huán)境:test’em
    • JavaScript Assertion Library:Chai Assertion Library
    • スパイ、スタブ、および模擬:sinon.js
    • 追加のアサーション:sinon.js chai
    • のアサーション
    • backbone.jsアプリケーションの単體テストに関するよくある質(zhì)問(FAQ)
    • backbone.jsアプリケーションでの単體テストの重要性は何ですか?
    単位テストは、特にBackbone.jsアプリケーションでは、ソフトウェア開発の重要な側(cè)面です。ソフトウェアの個々のコンポーネントをテストして、予想どおりに機能するようにすることが含まれます。これにより、開発プロセスの早い段階でバグを特定して修正するのに役立ち、時間とリソースを節(jié)約できます。さらに、開発者はコードに変更を加え、変更が既存の機能が壊れているかどうかを迅速に確認(rèn)できるため、単體テストによりコードリファクタリングが容易になります。また、テストを書くことは、モジュール化の改善とコードの高い結(jié)束につながることが多いため、コードの設(shè)計も改善します。

    backbone.jsのユニットテストは、他のjavascriptフレームワークと比較してどのように比較されますか?

    backbone.jsは、他のJavaScriptフレームワークと同様に、アプリケーションの品質(zhì)を確保するための単體テストをサポートします。ただし、Backbone.jsは、柔軟性とシンプルさのために際立っています。アプリケーションをどのように構(gòu)成すべきかを決定することはなく、開発者は適切と思われるアプリケーションを自由に設(shè)計することができます。この柔軟性は単體テストにまで及び、開発者が好みのテストツールと方法論を選択できるようになります。さらに、Backbone.jsは他のフレームワークと比較してフットプリントが小さく、単體テストのために高速かつ効率的になります。 Backbone.jsでの単體テストに利用できるいくつかのツールです。人気のあるものには、Mocha、Jasmine、Jestが含まれます。 Mochaは、開発者にアプリケーションをテストする簡単な方法を開発者に提供する機能が豊富なJavaScriptテストフレームワークです。 Jasmineは、JavaScriptコードをテストするための行動主導(dǎo)の開発フレームワークです。ブラウザ、DOM、またはJavaScriptフレームワークに依存していないため、BackBone.jsアプリケーションのテストに最適です。一方、Jestは、大規(guī)模なWebアプリケーションのシンプルさとサポートに焦點を當(dāng)てた包括的なテストソリューションです。 Backbone.jsアプリケーションのテストには、アプリケーションの各コンポーネントのテストケースの作成が含まれます。これには、モデル、ビュー、コレクションが含まれます。各テストケースは、コンポーネントの特定の機能をカバーし、他のテストケースとは無関係である必要があります。 MochaやJasmineなどのテストフレームワークを使用して、テストを作成できます。これらのフレームワークは、テストケースを定義し、テスト環(huán)境をセットアップおよび解體し、アサーションを作成する機能を提供します。 JSは、使用しているテストフレームワークに依存します。たとえば、Mochaを使用している場合は、Mochaコマンドラインツールを使用してテストを?qū)g行できます。ジャスミンを使用している場合は、ジャスミンコマンドラインツールを使用してテストを?qū)g行できます。これらのツールは、個々のテストケース、テストスイート全體、またはアプリケーション內(nèi)のすべてのテストを?qū)g行するオプションを提供します。また、渡され、失敗し、スキップされたテストの數(shù)など、テストの結(jié)果に関する詳細なレポートを提供します。 Backbone.jsでユニットテストを自動化します。自動化には、コードが変更されるたびにテストを自動的に実行する継続的な統(tǒng)合(CI)システムのセットアップが含まれます。これにより、変更によって導(dǎo)入されたバグがすぐにキャッチされます。 JavaScriptをサポートし、Backbone.jsの単體テストを自動化するために使用できるJenkins、Travis CI、Circleciなど、いくつかのCIツールが利用可能です。バックボーンでの単體テストのいくつかのベストプラクティスには、単一の機能をカバーする小さな焦點テストの作成、テストを互いに獨立させるためのいくつかのベストプラクティスが含まれます。 、および可能なすべてのエッジケースをテストします。また、テスト駆動型開発(TDD)として知られる実際のコードを作成する前に、テストを作成することも重要です。これにより、コードがテスト可能であり、より良いソフトウェアの設(shè)計に役立ちます。

    バックボーンで失敗した単位テストをデバッグするにはどうすればよいですか?障害の原因を特定するためのレポート。ほとんどのテストフレームワークは、問題を特定するのに役立つ詳細なエラーメッセージを提供します。また、Chrome Devtoolsやnode.jsデバッガーなどのデバッグツールを使用して、コードを介して変數(shù)と関數(shù)呼び出しを検査することもできます。 >はい、backbone.jsで単體テストでモックとスタブを使用できます。モックとスタブは、実際のオブジェクトの動作をシミュレートする偽のオブジェクトです。これらは、システムの殘りの部分からテストされているコンポーネントを分離するために使用されます。これにより、テストがより信頼性が高く、書きやすくなります。 sinon.jsなどのいくつかのライブラリがあります。これは、モックとスタブを作成および管理する機能を提供します。 Backbone.jsでのユニットテストのパフォーマンスには、テストとテスト環(huán)境の最適化が含まれます。これには、迅速に実行される効率的なテストの作成、並行してテストを?qū)g行し、高速テストフレームワークを使用することが含まれます。プロファイリングツールを使用して、テストプロセスで遅いテストとボトルネックを識別することもできます。

  • 以上がバックボーンのユニットテスト。JSアプリケーションの詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

    このウェブサイトの聲明
    この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

    ホットAIツール

    Undress AI Tool

    Undress AI Tool

    脫衣畫像を無料で

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード寫真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

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

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中國語版

    SublimeText3 中國語版

    中國語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統(tǒng)合開発環(huán)境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    Garbage CollectionはJavaScriptでどのように機能しますか? Garbage CollectionはJavaScriptでどのように機能しますか? Jul 04, 2025 am 12:42 AM

    JavaScriptのごみ収集メカニズムは、タグクリアリングアルゴリズムを介してメモリを自動的に管理して、メモリ漏れのリスクを減らします。エンジンはルートオブジェクトからアクティブオブジェクトを橫斷およびマークし、マークされていないオブジェクトはゴミとして扱われ、クリアされます。たとえば、オブジェクトが參照されなくなった場合(変數(shù)をnullに設(shè)定するなど)、次のリサイクルでリリースされます。メモリリークの一般的な原因には以下が含まれます。 closurures閉鎖の外部変數(shù)への參照。 globalグローバル変數(shù)は引き続き大量のデータを保持しています。 V8エンジンは、世代のリサイクル、増分マーキング、並列/同時リサイクルなどの戦略を通じてリサイクル効率を最適化し、メインスレッドのブロック時間を短縮します。開発中、不必要なグローバル?yún)⒄栅虮埭?、パフォーマンスと安定性を改善するためにオブジェクトの関連付けを迅速に裝飾する必要があります。

    node.jsでHTTPリクエストを作成する方法は? node.jsでHTTPリクエストを作成する方法は? Jul 13, 2025 am 02:18 AM

    node.jsでHTTPリクエストを開始するには、組み込みモジュール、axios、およびnode-fetchを使用する3つの一般的な方法があります。 1.依存関係のない內(nèi)蔵http/httpsモジュールを使用します。これは基本的なシナリオに適していますが、https.get()を使用してデータを取得したり、.write()を介してPOSTリクエストを送信するなど、データステッチとエラーモニタリングの手動処理が必要です。 2.Axiosは、約束に基づいたサードパーティライブラリです。簡潔な構(gòu)文と強力な機能を備えており、非同期/待ち聲、自動JSON変換、インターセプターなどをサポートします。非同期リクエスト操作を簡素化することをお勧めします。 3.Node-Fetchは、約束と単純な構(gòu)文に基づいて、ブラウザフェッチに似たスタイルを提供します

    JavaScriptデータ型:プリミティブ対參照 JavaScriptデータ型:プリミティブ対參照 Jul 13, 2025 am 02:43 AM

    JavaScriptデータ型は、プリミティブタイプと參照タイプに分割されます。プリミティブタイプには、文字列、數(shù)字、ブール、ヌル、未定義、シンボルが含まれます。値は不変であり、コピーは値を割り當(dāng)てるときにコピーされるため、互いに影響を與えません。オブジェクト、配列、関數(shù)などの參照タイプはメモリアドレスを保存し、同じオブジェクトを指す変數(shù)は互いに影響します。 TypeofとInstanceOFを使用してタイプを決定できますが、TypeOfNullの歴史的な問題に注意してください。これらの2種類の違いを理解することは、より安定した信頼性の高いコードを書くのに役立ちます。

    JavaScript Timeオブジェクト、誰かがEACTEXE、Google Chromeなどのより高速なWebサイトを構(gòu)築します。 JavaScript Timeオブジェクト、誰かがEACTEXE、Google Chromeなどのより高速なWebサイトを構(gòu)築します。 Jul 08, 2025 pm 02:27 PM

    こんにちは、JavaScript開発者!今週のJavaScriptニュースへようこそ!今週は、DenoとのOracleの商標(biāo)紛爭、新しいJavaScript Timeオブジェクトがブラウザ、Google Chromeアップデート、およびいくつかの強力な開発ツールによってサポートされています。始めましょう! 「JavaScript」の商標(biāo)を登録しようとするDeno Oracleの試みとのOracleの商標(biāo)紛爭は、論爭を引き起こしました。 Node.jsとDenoの作成者であるRyan Dahlは、商標(biāo)をキャンセルするために請願書を提出しました。

    React vs Angular vs Vue:どのJSフレームワークが最適ですか? React vs Angular vs Vue:どのJSフレームワークが最適ですか? Jul 05, 2025 am 02:24 AM

    どのJavaScriptフレームワークが最良の選択ですか?答えは、あなたのニーズに応じて最も適切なものを選択することです。 1.反応は柔軟で無料で、高いカスタマイズとチームアーキテクチャ機能を必要とする中規(guī)模および大規(guī)模プロジェクトに適しています。 2。Angularは、エンタープライズレベルのアプリケーションと長期的なメンテナンスに適した完全なソリューションを提供します。 3. Vueは使いやすく、中小規(guī)模のプロジェクトや迅速な発展に適しています。さらに、既存のテクノロジースタック、チームサイズ、プロジェクトのライフサイクル、およびSSRが必要かどうかは、フレームワークを選択する上で重要な要素でもあります。要するに、絶対に最良のフレームワークはありません。最良の選択は、あなたのニーズに合ったものです。

    JavaScriptですぐに呼び出された関數(shù)式(IIFE)を理解します JavaScriptですぐに呼び出された関數(shù)式(IIFE)を理解します Jul 04, 2025 am 02:42 AM

    iife(即時インドボークフニックエクスペッション)は、定義の直後に実行される関數(shù)式であり、変數(shù)を分離し、グローバルな範(fàn)囲の汚染を避けるために使用されます。括弧內(nèi)に関數(shù)を包むことによって呼び出され、式と括弧のペアがすぐにそれに続く、(function(){/code/})();そのコアの使用には、次のものが含まれます。1。さまざまな競合を回避し、複數(shù)のスクリプト間の命名の重複を防ぎます。 2。プライベートスコープを作成して、內(nèi)部変數(shù)を見えないようにします。 3。変數(shù)が多すぎずに初期化を容易にするモジュラーコード。一般的なライティング方法には、ES6矢印関數(shù)のパラメーターとバージョンで渡されたバージョンが含まれますが、式とタイを使用する必要があることに注意してください。

    ハンドリングの約束:javascriptのチェーン、エラー処理、および約束の組み合わせ ハンドリングの約束:javascriptのチェーン、エラー処理、および約束の組み合わせ Jul 08, 2025 am 02:40 AM

    約束は、JavaScriptで非同期操作を処理するためのコアメカニズムです。チェーンコール、エラー処理、コンビナーの理解は、アプリケーションをマスターするための鍵です。 1.チェーンコールは、.then()を通じて新しい約束を返し、非同期プロセスの連結(jié)を?qū)g現(xiàn)します。それぞれ.then()は以前の結(jié)果を受け取り、値または約束を返すことができます。 2。エラー処理は、.catch()を使用して例外をキャッチしてサイレント障害を回避し、キャッチのデフォルト値を返すためにプロセスを継続する必要があります。 3。promise.all()などの組み合わせ(すべての成功後にのみ成功しました)、promise.race()(最初の完了が返されます)、promise.allsettled()(すべての完了を待っています)

    キャッシュAPIとは何ですか?また、サービスワーカーでどのように使用されますか? キャッシュAPIとは何ですか?また、サービスワーカーでどのように使用されますか? Jul 08, 2025 am 02:43 AM

    Cacheapiは、ブラウザからネットワークリクエストをキャッシュするツールです。これは、ウェブサイトのパフォーマンスとオフラインエクスペリエンスを改善するために、サービスワーカーと併用することがよくあります。 1.開発者は、スクリプト、スタイルシート、寫真などのリソースを手動で保存できるようにします。 2。要求に応じてキャッシュ応答と一致させることができます。 3.特定のキャッシュの削除またはキャッシュ全體のクリアをサポートします。 4.フェッチイベントを聞いているサービスワーカーを介して、キャッシュの優(yōu)先順位またはネットワークの優(yōu)先戦略を?qū)g裝できます。 5.オフラインサポート、繰り返しのアクセス速度の高速化、主要なリソースのプリロード、バックグラウンドアップデートコンテンツによく使用されます。 6.それを使用する場合、キャッシュバージョンの制御、ストレージ制限、およびHTTPキャッシングメカニズムとの違いに注意する必要があります。

    See all articles