javascriptコードのテスト。 JavaScriptコードのモジュラーテスト:戦略、ライブラリ、ツール。 WindowsでのPhantomJSの問題

ゴロフナ / うすねにゃ誤動作

プログラム要素の動作はさまざまな理由で変化する可能性があるため、効果的なテストケースを作成することは、優れたプロジェクトにとってさらに重要になる可能性があります。 おそらく、最も問題なのは、大規模な小売業者のグループがそれに取り組んでいるが、合計モジュールに取り組んでいる場合です。 他のプログラマーによって作成された関数の動作に、計画外の変更を引き起こす可能性があります。 プログラムの重要な部分の必然的な変化をもたらすために、用語のスタイルでロボットを上に。

Webプログラムを使用したテストは、要素の視覚的評価と機能の実用性の経験的評価のように聞こえます。 分割に沿った移行のトブトと動的要素の日曜大工。

何年にもわたって、プロジェクトは新しいものを彷彿とさせます 機能性、ヨガロボットの再検証のプロセスを複雑にするのに何が必要ですか。 バイコリストモジュール(ユニット)テストを自動化するため。

テストシナリオを誘発するためのІsnuyu2アプローチ:

  • 白い箱テスト–筆記テストは、機能の実装に基づいています。 トブト。 システムのロボットモジュールを含む同じアルゴリズムに合わせて改訂します。 このようなpidhidは、ロボットシステムの正確さを保証するものではありません。
  • ブラックボックステスト-シナリオの作成は、システムの仕様と機能に基づいています。 したがって、すべてのプログラムの作業結果の正確さを検証することは可能ですが、そのようなpidhidは、他のより一般的な恩赦を許可しません。

Cho testuvati

どのような皮膚機能検査が行われたのか、どのように実施したのかを知ることができるかもしれません。 私たちはそれをそれとは呼びません。 テストの作成には小売業者の1時間かかります。これは、vartoプログラムでの作業プロセスを最適化し、より折り畳み、重要で静かな機能のテストを準備して、システムの他のモジュールの作業結果に保存できるようにするためです。 。 あいまいなロジックをテストでカバーします。その場合、許しを非難することができます。 したがって、varto svoryuvatはtydіlyanokコードをテストし、将来の計画ではyakіを最適化して、最適化のプロセスの後にїхvikonannyaの正確さに再変換できるようにします。

開発条件のスタイルに従って、テストの結果を慎重に評価することが重要です。 もちろん、その時間に寒くない場合は、皮膚機能をテストでカバーすることができます。 エール、調査は時間のプレッシャーの中で行われていると思いましょう。そのため、テストを実行する必要がある場合は、既知のインテリジェンスの小売業者の分析を行う必要があります。 さらに、テストを作成すると、プロジェクトの品質が向上します。

この順序で、単体テストのビクトリアが真である場合、3つのvipadkiを作成することができます。

1)義父として、大きな冗談を言うために、恩赦を示す機会を与えてください。

2)楽しみのために時間を減らす

3)頻繁に変更されるコードをテストできます。

フロントエンドの3つの主要コンポーネント(HTML、CSS、JavaScript)をテストする必要があり、JavaScriptコードもテストする必要があります。 小売業者/テスター/交換業者がレビューされる場合、CSSは視覚的な方法によってのみレビューされます グラフィカルインターフェイスさまざまなブラウザ。 HTML-マークアップも同じように書き直されます。

ヤクtestuvati

テストを実施するためのシナリオを促すときは、次の原則に従ってください。

  • あなたのテストは可能な限り単純かもしれません。そうすれば、この演習の結果に、あなたが繰り返そうとしているのとまったく同じバグが追加される、より効率的なものになります。
  • 優れたモジュールのテストを分解します。許しの具体的な場所を知るのが最善です。
  • ロブテスティは独立しています。同時に1つのテストの結果は、別のテストの結果の低下を非難するものではありません。
  • 実行されたテストの結果は、何度も繰り返される場合があります。したがって、テストを再度実行すると、結果は前回と同じになる可能性があります。
  • どんな種類の許しのためにでも、Vikonanプログラムはテストスクリプトの作成を持っているかもしれません。このランクでは、バグが効果的に修正され、coristuvachiに表示されないことを確信できます。

Chim testuvati

jsコードの単体テストには、いくつかのライブラリがあります。 おそらく最も広いのはQUnitです。 ライブラリを利用して単体テストを実行するには、「pisochnitsa」を作成する必要があります。これは、テスト用のライブラリ、テストする必要のあるコード、および自分自身をテストします。

テスト用の関数:

(function()(window.stepen = function(int)(var result = 2; for(var i = 1; i)< int; i ++) { result = result * 2; } return result; } window.returnFunc = function() { return "ok"; } })();

テストリスト:

Test( "stepen()"、function()(equal(stepen(2)、4、 "2 ^ 2-equal method"); ok(stepen(3)=== 8、 "2 ^ 3-ok method" ); deepEqual(stepen(5)、32、 "2 ^ 5-deepEqualメソッド");)); asyncTest( "returnFunc()"、function()(setTimeout(function()(equal(returnFunc()、 "ok"、 "Async Func Test"); start();)、1000);));

ご覧のとおり、QUnitは、コードの照合結果を検証と照合するために3つの関数をサポートしています。

  • わかった()–テストが成功したかどうか、結果が次のようになるかどうかを確認します= true
  • 同等()-結果をスコアリングと一致させます
  • deepEqual()-結果をスコアリングと照合し、タイプを再確認します

vikonannyの結果:

ご覧のとおり、QUnitライブラリは、多数のブラウザーに対して1回コードテストを実行します。

単体テストのための他のライブラリの使用。 ただし、それらでテストするための刺激シナリオの概念は同じであるため、1つのことを整理した後は、別の言語に切り替えることは重要ではありません。

覚えておくことが重要です

現在のjsコードの特徴は、視覚化の非同期性です。 テスト用のライブラリは、非同期テストを実行できる場合があります。 ただし、たとえば、get-requestをバックエンドに送信してオンに戻すなど、関数に抗議しようとする場合は、テストを実行するために、stop()関数を実行し、次の関数を実行する必要があります。がテストされているので、setTimeout()のstart()メソッド「WrappedYogo」を使用してプロセスを再開します。 トブト。 あなたはそのようなギャップを時間に置くことで罪を犯します、それによって機能が完了するかもしれません。 この曲がりくねった部分を入念に選択する必要があります。 一方の側から、ロボットはこの方法を試しましたが、特異性として、レポート機能の特定の実装の必要性と誤った動作を誘発する可能性があります。

バックボーンアドオンのテスト

Backbone.jsフレームワークで記述されたプログラムをテストする目的で、プロジェクトはによって記述されます。

モジュラーテストをテストできます。

  • モデルとコントローラーの作成の正確さ
  • モデルのデータの正確さ
  • コントローラーのVikonannyaメソッド(結果を変えることができる悪臭)
  • 関心の成功

テストコード:

Test( "Backbone.js"、function()(ok(sample、 "Namespace check"); ok(sample.routers.app、 "Router check"); ok(sample.core.pageManager.open( "chat") )、 "ページオープニングテスト(コントローラーメソッド呼び出し)")ok(sample.core.state、 "モデルチェック"); "); stop(); ok(function()($ .ajax((url:" app / templates / about.tpl "、dataType:" text ")))。html(data); return data;))、" Template load check ")、setTimeout(function()(start();)、1000);

恩赦テストを伴う作業の結果:

テスト実行の自動化

原則として、プログラムのスロートは、集中的な成長とともに頻繁に実行する必要があるため、マネージャー向けです。 したがって、この操作を自動化します。 Mimic Jenkinsは、シームレスな統合のためのツールです。 このアイデアは、Jenkinsを介してデプロイし、自動テストを実行するのに役立ちます。

QUnitテストはブラウザーで実行されます。 これらの機能を回避して、ブラウザのロボットをエミュレートするソフトウェアであるphantomjsを使用してください。 phantomjsディストリビューターは、QUnitをテストするためのスクリプトをすでに提供しており、正しいロボットのプロテが追加の作業を行う機会がありました。

/ ** *テスト条件が真になるか、タイムアウトが発生するまで待ちます。 *サーバーの応答を待つ*またはUIの変更(fadeInなど)が発生するのに役立ちます。 * * @param testFxブール値に評価されるjavascript条件、*文字列として渡すことができます(例: "1 ==1"または*"$("#bar ")。is(":visible ")"または*コールバック関数として。( ":visible")"または*コールバック関数として。*@param timeOutMillis待機する最大時間。*指定されていない場合、3秒が使用されます。= timeOutMillis?timeOutMillis:3001、//< Default Max Timout is 3s start = new Date().getTime(), condition = false, interval = setInterval(function() { if ((new Date().getTime() - start < maxtimeOutMillis) && !condition) { // If not time-out yet and condition not yet fulfilled condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code } else { if(!condition) { // If condition still not fulfilled // (timeout but condition is "false") console.log(""waitFor()" timeout"); phantom.exit(1); } else { // Condition fulfilled (timeout and/or condition is //"true") console.log(""waitFor()" finished in " + (new Date().getTime() - start) + "ms."); typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it"s supposed to do once the // condition is fulfilled clearInterval(interval); //< Stop this interval } } }, 100); // repeat check every 250ms }; }; if (phantom.args.length === 0 || phantom.args.length >2)console.log( "使用法:run-qunit.js URL"); phantom.exit(); )var page = new WebPage(); //「console.log()」呼び出しをページ内から//コンテキストからメインのファントムコンテキスト(つまり、現在の「this」)にルーティングしますpage.onConsoleMessage = function(msg)(console.log(msg);); page.open(phantom.args、function(status)(if(status!== "success")(console.log( "Unable to access network"); phantom.exit();)else(waitFor(function() (return page.evaluate(function()(var el = document.getElementById( "qunit-testresult"); if(el && el.innerText.match( "completed"))(return true;)return false;)); )、function()(var failedNum = page.evaluate(function()(var el = document.getElementById( "qunit-testresult"); console.log(el.innerText); try(return document.getElementsByClassName( "fail" )).innerHTML.length;)catch(e)(return 0;)return 10000;)); phantom.exit((parseInt(failedNum、10)> 0)?1:0);

テスト付きのスクリプトの結果をコンソールに表示するには、ロギング機能を追加する必要があります。

コードテスト-目に見えない開発のサイクル ソフトウェア。 Pochatkіvtsіチームの開発者は、しばしばその役割を過小評価し、古い方法でプログラムの実用性を修正します-「練習、それは良いことです」。 早い段階で、この戦略はヒットをもたらし、バグトラッカーは未知の推力の軍隊を圧倒し始めます。 そんなパスタで食べないようにすすり泣き、テストのニュアンスを勉強することをお勧めします JavaScriptコード。

JavaScriptは同じではありません

今日 JavaScript-それはpovzhavlennyaの単なるmovaではありません 正気に見えるプログラム。 JavaScriptが揚げ物やメニューの準備のためにハッキングされた時間は、取り返しのつかないほどなくなりました。 今では独立した言語ですが、クライアントとサーバーの両方で練習することをお勧めします。 JavaScriptの役割は徐々に促進されています。つまり、コードを作成するときは、他のプログラミング言語で十分に証明されているプラ​​クティスをいじらないようにする必要があります。

実践とパラダイムに関して私は何ができますか? 素晴らしい、建築テンプレート MVC(モデルビューコントローラー)そのパターン編成コード。 これに従えば、狡猾なトリックではありません。より正確なコードを記述できます。これにより、保守が容易になるだけでなく、自動テストが可能になります。

より多くのテスターを許してください

テストの最も一般的な方法が「目」の平凡な逆転であったことは誰にとっても秘密ではありません。 その本質は、非類似点まで単純です。1000行のコードを記述し、タスクを実行し、独自のvitvirを起動しました。 掘り下げてクリックすると、すべてが機能し、戦闘サーバーにアップロードできます。 すべてが境界線上で単純であり、小売業者(理想的には「テスター」にとって良い人)の適切な注意を払えば、ロボットプログラムの正確さに頼ることができます。

実際には、すべてが異なっているようです。 原則として、okremogotestuvalnikはありません。 rozrobnik自体がプログラムの実用性を再考しようとし、技術マネージャーの順序に違反しています。 Seleniumでの追加のスピーチに対する同様の統合テストを自動化するためのより高度なフォージコード。

このようにして、プログラマーは失礼な許しだけを示す機会を奪います。 残念ながら、「愚か」で「パフォーマンスが悪い」di koristuvachは、巧妙にビジネスロジックに行き、99%のスピーチで舞台裏に残されています。

テスターの人の中にオクレモイの人がいることも、しばしばそして歌う時間まで問題を破壊します。 あなたが詳細に関してあなたのサッパーを示したいならば、あなたのテストの質は補遺の増加とともにゼロに低下します。 実践から例を挙げましょう。

まるで小さなプログラムの開発を任されたかのように。 プロジェクトの機能については、最も単純なCRMを推測して、最短でどのように実現したかを説明します。 ブドウ園を離れた後、私は休暇を副官に譲り、春の数ヶ月のプロジェクトを忘れました。 ダリはnaytsіkavіsheを始めました。 Zamovnik Virishivはプログラムの機能を真剣に拡張し、私に助けを求めました。 当然のことながら、私は機能の後に新しい機能を取り上げて作業を開始しました。 後頭部は首尾一貫していませんでしたが、機能が深く統合された場合、ジグザグに動くバッグが私のバイクに突入しました。 Shmatkiコードが競合し始め、競合を解決するために多くの時間を浪費する可能性がありました。 「しかし、あなたが独身でない場合、あなたの虫垂の問題は何ですか?」 -敬意を表する読者に聞いてください。 立ち上げましたが、補遺が成長したことで、群れの機能全体に抗議するのに1時間も神経質にもなりませんでした。 私はいくつかの機能のテストに干渉し、その代償を惜しみなく支払いました。 物語の教訓は、「開発の目に見えない部分としてテストについて考えてください」です。

Unit testi yak sribna kulya

神経を節約し、プログラムのいくつかの部分のパフォーマンス保証を改善します。これは、モジュラーテストを支援するための最良の方法です。 このひどい言葉に何度も出くわしたことがなければ、簡単に説明します。 モジュラーテストを使用すると、テストプロセスを自動化し、プログラムの皮膚機能をテストできます。

新しい関数の開発が完了した後(開発の開始前にテストを作成する場合の変形の可能性があります)、開発者は自分のコードをテストするための特別なコードを作成します。 テスト用のコードでは、さまざまな状況とローテーションされている値を観察する必要があります。 たとえば、ギャップをトリミングする関数を作成しました。 їїの実践に抗議するために、私たちは次のことを主張できるようにするために、テストのサンプルを準備する罪を犯しています。

  • 出力で行「行」を送信するとき、「行」を取ります。
  • 出力で「行9」という用語を転送する場合、「行9」を使用します。
  • 他の入力パラメーターのテストを追加することもできます(たとえば、タブ文字を置き換えます)。 Zagalomは、コードをテストでカバーする速度が速く、否定的なオプションが多いほど、3本の髪の毛を失う可能性が高くなります。

    JSの世界では、追加の特殊なフレームワークのテストが説明されています。 テストの必要なすべての説明を見て、テストのオーバーランに関する調査結果を体系化するための最悪の場合のツールを見つけてください。

    テスティ! =初期コード

    Rozrobnikov、yakіはvikoristovuyutユニットテストではなく、stverzhuvatyが大好きで、schoユニットテストvmagaєがそのpіdtrimkidodatkovogoコードを記述しています。 Movlyav、実際のプロジェクトの用語はほとんどの場合スタイル的にあり、高度なコードを書くことは単純に不可能です。

    古い用語でも問題ありませんが、コードを先取りする準備ができています。 片側からは、追加のコードの証言、したがってそれを書くのに1時間かかります。 反対に、このコードは自動車のエアバッグの役割に違反しており、プログラムを増やすことで確実に報われるでしょう。

    バザニヤを苦しめる時間がない場合は、テストの作成について3回考えてみてください。 このような場合、テストでより多くの狡猾なコードのみをカバーし、同じ方法でテストしないことは可能です。 いつまでも未来を見据えて考えてください。そうしないと、1か月でプログラムが前例のない成長に成長する可能性があります。

    すべてのコードがテストされているわけではありません

    メインコードを書く前にテストについて考える必要があると主張するのはなぜですか? ユニットテストに渡されることが多いコードは、異なるスタイルで記述されているためです。 どんなコードでも抗議できます。 その兆候の論理を持っているコード、そして正常に抗議することは不可能です。 ここで私は多くの簡単なルールを実行するためにラジャを続けます:

  • 優れた関数を書いた痕跡ではありません。 皮膚機能は、100,500の可能な状況ではなく、1つの問題のせいです。 たとえば、関数でサーバーにデータを管理するためのコードを入力する必要はありません。これは、サーバーの準備に必要です。
  • コードに10行を超えて追加された関数は、すべての不潔な関数に対してより高速です。
  • いずれにせよ、その兆候の論理は非難することではなく、同時にです。
  • QUnit-jQueryの作成者によるこのジャンルの古典

    QUnit JavaScriptの小売業者の間で特に人気があります。 まず、十分に文書化されており、使いやすいですが、それ以外の場合は、jQueryの作成者によって作成されています。 このライブラリは、JavaScriptだけでなくjQueryに基づいて作成されたコードのテストにも適しています。

    Zavantageity 残りのバージョン QUnitは、公式サイト(http://qunitjs.com/)から使用できます。 ライブラリは、1つのJSを見て提供されます。 cssファイル。 必要なコンポーネントからそれを取り出したとしましょう。そうであれば、トライアルテストを作成する時が来ました。 行き過ぎないように、上記のtrim()関数に抗議してみましょう。

    テストを示すために、次のコンストラクターから最も単純なプロジェクトを作成しました。

    Index.html-テスト結果を表示するメインファイル。 --qunit-1.12.0.js –qunitライブラリファイル。 --example.js-テスト用のコードをテストするためのファイル(たとえば、trim()関数の説明)。 --test.js-テストを含むファイル。 --qunit-1.12.0.css-テストを使用してスターを設計するためのスタイル。

    リスト1と2の表現のファイルindex.htmlとtest.jsで、私たちのほとんどは、テストされている関数(trim())と再検証のためのテストのコードが含まれている別のリストをクリックします。実用性が指摘されています。 トリム()関数自体が永久に省略できることを考慮に入れるために、私は雑誌のスペースを節約するためだけにそれを別のリストに押し込みます。

    それでは、テスト自体を見てみましょう。 私たちのコードのpraceszdatnostiのzdіysnennya再検証のために qunit.js低い方法を教えてください:

  • テスト()-テストの説明についてはObgorka。
  • わかった()-確認により、最初のパラメーターの真偽を確認できます。 このアプリケーションでは、trim()関数をすばやく呼び出してこれらの値を照合するので、トリムを確認します。 Yakshchoumovaはtrueです-テストに合格しました。
  • 同等()–このメソッドでは、最初のパラメーターと他のパラメーターの有効性を逆にすることができます。 私はあなたに最高の敬意を表します、scho 与えられた方法 vikonu nesuvoruリバーブ、スカラー値のみに適合します。
  • notEqual()-延長equal()。 Vikonuєtsya、それがより重要であるかのように、他の人にとってより価値がない。
  • strictEqual()–追加のチェックが1つだけあるequal()と同様–ビクトリア朝の厳密な再検証(つまり、データのタイプの再検証)。
  • notStrictEqual()–長引くメソッドstrictEqual();
  • deepEqual()–再帰的強化の方法、プリミティブ、配列、オブジェクトのzastosovuetsya。
  • notDeepEqual()–延長メソッドdeepEqual();
  • raises()-ウィンクレットを生成するターンアラウンドの機能をテストするために検証されました。
  • 別のリストでは、最初にqiメソッドを実用的な方法で設定する方法を示しました。 このようにテストバットを実行すると、すべてのテストに合格します(神の幼い赤ちゃん)。 正常に合格したテストと許しで終わるテストの違いをサポートするために、1つのテストのコードを少し変更しました。 助けを求める生地を一列に並べる strictEqual()許しの結果を追加しました(神の幼い赤ちゃん)。

    リスト1.index.htmlファイル内

    QUnitのヘルプをテストする

    リスト2.テストファイルとtrim()関数

    function Trim(string)(return(string || "").replace(/ ^ \ s + | \ s + $ / g、 "");)test( "Test function Trim()"、function()(ok(trim ("test")== "test"、 "極端なギャップがあります"); ok(trim( "1")== "1"、 "側面にたくさんの穴があります"); = "24"、 "そのタブを側面からトリミングします"); equal(trim(" ")、" "、"空の行 ");

    3つのテスト シンプルな機能 nachebtorazіbralisya。 毎回、私に何も与えないでください。 次に、実際のコードを取得して、自分でテストを作成する必要があります。 私たちは何か他のものに驚嘆し、しばしば前にその仕事を非難します JavaScript-小売業者-非同期関数のテスト。 JavaScriptコードが詰め込まれたプログラムは、99%がAjaxの助けを借りてサーバー部分と対話します。 再検証せずにコードを除外することも不可能ですが、それ以外の点では、テストの記述はトリオのように見えます。 例を見てみましょう:

    AsyncTest( "myAsyncFunc()"、function()(setTimeout(function()(ok(myAsyncFunc()== true、 "データは正常に渡されました"); start();)、500);));

    主なことは、前の部分のバットをチェックすることです-test()のラッピングはasyncTest()に置き換えられます。これは、テスト自体をテストするための非同期性が低いことを宣言します。 次に、ochіkuvannya500mlの時間を開始します。 秒 1時間の間、myAsyncFunc()関数はテストサーバーへのデータの送信を担当しますが、それでもtrueにはなりません。 ここの軸はそれ自体で来ます 刻々と過ぎていく瞬間。 asyncTest()呼び出しが呼び出されると、実行が継続され、テストが完了した後、自分で実行する必要があります。 フロー制御用 QUnitєstart()およびstop()メソッド。

    ライブラリを使用した非同期関数のテスト QUnit勝つのは簡単です。 私が描きたいお尻の残りの部分は、非同期のperevіrokのkіlkaをvikonuする筆記試験から結び付けます。 同様のタスクでtsimuを非難するかのように、スマットフードはvikonannyaのストリームを開始するのに最適な場所です。 公式ドキュメントは、kshtaltのこれらのvipadで停止するように伝播します。

    AsyncTest( "myAsyncFunc()"、function()(expect(3); //ここで3回の再テストが機能しますok(myAsyncFunc()、 "作業光は1よりも優れています"); ok(myAsyncFunc()、"作業光はより優れています2 "))ok(myAsyncFunc()、"3より高速である必要があります"); setTimeout(function()(start();)、3000);));

    DIYkoristuvachのテスト

    JavaScriptは多くのインターフェースで書かれていることを覚えておいてください。 たとえば、koristuvachがpіmpіをクリックすると同時に、yogoクリックがステータスになる可能性があります。 非個人的なプロジェクトの同様の「インターフェース」コードもテストでカバーする必要があります。 キーの猛攻撃をモデル化して、このキーのokremyテストを作成する方法を考えてみましょう。 キーが押されたかのように、関数になることができます。 Її私が3番目のリストで見つけたコード:

    リスト3.キーストロークのログ

    function KeyLogger(target)(if(!(this instanceof KeyLogger))(return new KeyLogger(target);)this.target = target; this.log =; var self = this; this.target.off( "keydown") .on( "keydown"、function(event)(self.log.push(event.keyCode);));)

    この抗議の機能を試してみましょう。 Nasampered、このテストでは、押されたキーを削除する必要があります。 図書館に助けを求める方が簡単です jQuery、これにより、コードの行のペアを作成できます(div。リスト4)。

    リスト4.KeyLoggerのテストコード

    test( "Key Logging Test"、function()(var event、$ doc = $(document)、keys = KeyLogger($ doc); event = $ .Event( "keydown"); event.keyCode = 9; $ doc .trigger(event); equal(keys.log.length、1、 "キーログ");

    テストのリストの最初に、キーの押下をエミュレートするためのポッド(「キーダウン」)を準備しています。 Tabキー(コード9)を押しています。 次に、trigger()メソッドを使用して、準備した表彰台を修正します。その後、テストに進むことができます。 続けて、全体像、つまりキーが押されたことを再確認してから、コーディングします。

    クローズテスト用のDOM

    一度 qunit.js DOMのテストの作成を許可する場合、DOMのテストの作成に問題はありません。 そうです、私の言葉を確認するために尻を下に向けます。 私はヨガについてコメントしていません。コードを見るだけで、すべてを理解できます。

    Test( "新しいdiv要素の追加"、function()(var $ fixture = $( "#qunit-fixture"); $ fixture.append( "

    新しいdivの価格
    "); equal($(" div "、$ fixture).length、1、"新しいdivが正常に追加されました! ");));

    Phantom.JS-コンソールからテストを実行します

    ライブラリの助けを借りてテストを書く qunit.js手動で簡単に、初期のchipiznoをエールします。テストの開始と結果の選択を自動化する必要があることがわかります。 たとえば、私は助けなければなりません 仮想マシン DigitalOceanでは、コンソールの助けを借りて私ができること。

    phantom.jsプロジェクトを使用すると、この問題をエレガントに解決できます。 Tseは書くためのフレームワークの地獄ではありません ユニットテスト、およびエンジンのフルコンソールバージョン webkit。 簡単に言えば、プログラムはブラウザです。 phantom.jsの助けを借りて、テストの再検証を自動化するだけでなく、非個人的なタスクを失敗させることも、小売業者のせいにするのは時期尚早です。ファイルの側面のレンダリングから結果を削除します(png、 jpg)、タイリングモニターの機能(幅が絡み合っている、薄いのが生産的)。 など)、エミュレーションdiykoristuvachtoshcho。 自分で知っているプロジェクトの公式ドキュメントを罵倒したり読んだりしないことをお勧めします。

    Phantom.jsさまざまなプラットフォーム(nix、mac OS X、Windows)を選択できます。 Windowsですべてを拡張している場合は、毎日の問題はありません。事前にバイナリをダウンロードしてください。 2つのビデオアダプタがインストールされている場合、起動上の小さな問題が発生する可能性があります。そのうちの1つはNVidiaです。 どのようにあなたがたまたまハックをするのか、私たちはそれをvrіzannyで説明します。

    実際にphantom.jsを理解してみましょう。 ショブスキップスルー phantom.js過去に準備されたテストをコンソールに表示するには、特別なスクリプトローダーであるrun-qunit.jsが必要です。 コンソールを開き(私はWindowsを使用しています。これはvicorist cmdです)、次の形式でコマンドを入力します。

    phantom.exe<путь к run-qunit.js> <путь к странице с тестами>

    私の意見では、起動コマンドは次のようになりました。

    E:\ soft \ phantomjs> phantomjs.exe E:\ temp \ testjsforx \ qunit \ run-qunit.js file:/// E:/temp/testjsforx/qunit/index.html結果їїvykonannya:テストは2592ミリ秒で完了しました。 9つのうち9つの評価が合格し、0が失敗しました。

    すべてのテストに合格

    コードをテストでカバーすることは間違いなく必要であり、プログラムが作成されている規模は関係ありません。 しばらくの間、最も人気のあるプログラムのいくつかは扱いにくいモンスターに変身し、機能を改善して追加する必要があると思います。 テストでコードを適切にカバーすることは、成功と品質を保証するものです。 したがって、自動テスト用のコードを書き始めるのは簡単ではありませんが、簡単ではありませんが、将来的にはすべての小麦粉が報われるでしょう。 今日は私がすべてを持っている人、頑張ってください!

    テストする時間がない場合

    当面は、単純な関数のテストを作成する意味はありません(記事のアプリケーションから同じtrim()を取得します)。むしろ、コードの最も重要なケースに焦点を当てます。 頻繁に変更されるコードを作成する場合、Dotrimuvatisyatsgogoルールスレッド。 ライブプロジェクトの技術的なタスクは頻繁に変更され、実際の機能は常に更新する必要があります。 このような変更は、許容できない瞬間を引き起こす可能性があります。新しい変更を使用すると、コードは正常に機能しますが、古いものは有機的にオーバーエッチングされません。 ここでファイルを誹謗中傷しないようにAxisschobを使用すると、同様の機能がテストでカバーされる可能性が高くなります。 単純なルールを覚えておいてください。コード全体をテストでカバーし、コードの最も重要な部分をカバーする時間はありません。

    良いテストルール

  • テストは可能な限り簡単にすることができます。 折り畳み可能なテストが多ければ多いほど、新しいテストを許す勇気が増します。
  • テストはモジュールにグループ化する必要があります。そうすれば、後で許しやプログラムの一部をテストする機能を簡単に知ることができます。
  • 皮膚テストおよび他のテストでの沈着;
  • 虫の皮膚症状については、常にオクレミアテストを作成してください。
  • Windowsでのphantom.jsの問題

    それで、それはすでに起こりましたが、すべてを統計に適用します。私はLinuxではなく、古き良きWindows 7でテストしました。ビデオアダプターが勝利するシステムで作業する場合、phantom.jsに小さな問題があるようです。 ビデオチップが統合された私のラップトップでは、NVidiaはまだハングアウトしており、phantom.jsを介してphantom.exit()コマンドに断固として応答します。 その結果、スクリプトが実行されてメモリにハングし続けた後、phantom.jsプロセスはその作業を完了しませんでした。 同時に、端末は完了コマンドにも反応しました(ctrl + c-ヘルプなし)。

    あなたが同様の問題で立ち往生しているかのように、あなたは勝つことを計画しています phantom.js Windowsで、攻撃的なハックを攻撃する準備をします。 VіdkriyパネルkeruvannyaNvidia。 ツリーで「3D設定」項目を見つけます。 右利きの人はオプション「Perevezhny」の罪を犯している グラフィックアダプタ"。 zamovchuvannyamの場合、їїの値は「Avtovibor」に設定されます。 高性能のNvidiaプロセッサまたは統合グラフィックスを覚えておく必要があります。 いくつかの簡単なトリックの後 phantom.js聴覚的に振る舞い始めた。

  • Cristian Johansen Test-Driven JavaScript Developmentは、テストの作成の観点からJavaScriptを検討している数少ない本の1つです。
  • John Resing、BeerBibo「JavaScriptNinjaSecrets」- ガーネブック、JSの1年目には、中級レベルのトレーニングから小売業者に幸運を祈ります。 この本は、効果的なクロスブラウザーコードを書く力、コードを処理するニュアンス、および他の多くのフレーバーを詳細に調べています。
  • 今後のトピックに関する知識のテストがサイトで利用できるようになりました。 HTML, css, JavaScript, PHP, SQL.

    皮膚試験は累積的です 10それらの歌を食べなさい。 私はあなたが可能な限りあなたの知識を再確認することができるように、stosuvannya特定の言語の最も中毒性のある領域に対処するために皮膚の栄養を試しました。

    クレイジー、すべて 生地フリーそしてそれらを通り抜けてください。

    テスト順序:

    1. 助けを求める Rozpochati testuvannya実行可能なテストで。
    2. 供給に関するVіdpіdaєte、 独身正しいオプション。
    3. テスト終了後、大歓迎です あなたのボール, 恩赦の数、 と同様 皮膚栄養の選択テストから。

    尊敬!フィードの前に向きを変えて、見ないでください。また、最初に、低く、考えてください。

    テストの時点で利用可能

    1. HTML

      • Usogoテストに合格しました: 75424人
      • 平均スコア: 5つ星のうち2.83バリブ。

      基礎知識テスト HTML。 あなたは基本を知る必要があります HTMLタグ、そしてより有能なїхvoicingを学びます。 規格の特徴を理解することも必要です XHTML 1.1.

    2. css

      • Usogoテストに合格しました: 32828 osib
      • 平均スコア: 5つ星のうち3.37バリブ。

      テストは基本の知識をチェックします css。 テストに合格するには、セレクターの主なタイプ(構文)、主なパワーとそれらの可能な値、および最も一般的な疑似要素の認識を知っている必要があります。

    3. JavaScript

      • Usogoテストに合格しました: 24845 osib
      • 平均スコア: 3.31/5バリブ。

      このテストでは、JavaScriptの知識をテストします。 生地からの栄養素は、stosuvannyatsієїmovのさまざまな球によって引き裂かれます。 「dribnih」のニュアンスを理解するためのさらに豊富な食品。 それ以外の場合は、基本的なスピーチを知っておく必要があります。変更の処理、JavaScriptの基本機能、操作の優先順位などです。

    4. PHP

      • Usogoテストに合格しました: 33239 osib
      • 平均スコア: 3.03 of 5バリブ。

      このテストでは、PHP言語の知識を確認します。 あなたはメインの知識が必要になります PHPコンストラクト、変更作業、セッション、リダイレクトおよびその他の標準的なスピーチの実装
      Perekonlive prohannya:テストでは、「誰のためにスクリプトを書いたのですか?」というチェックをたくさん求めます。 素晴らしいプロハニヤ、ヨガをコピーして修正する必要はありません。 あなた自身に正直であれ。

    5. SQL

      • Usogoテストに合格しました: 18014人
      • 平均スコア: 5つ星のうち3.28バリブ。

      このテストでは、映画に関する知識を確認しています。 SQLクエリ。 食べ物が自然に始まる可能性は低いです 基本知識 tsієїは、いかなる種類の破壊もなしに移動します。 基本的なSQLクエリを理解し、それらをより適切に使用できるようにする必要があります。

    ІєjQuery公式テストツール。 Ale QUnitは、JavaScriptコードのテストに適しており、RhinoまたはV8の追加メカニズムの背後にあるサーバー側JavaScriptのテストを開始します。

    「モジュラーテスト」のアイデアがわからない場合でも、混乱しないでください。理解するために折りたためるものはありません。

    "モジュラーテストまた ユニットテスト(英語 ユニットテスト)-プログラミングのプロセス。これにより、正確性を確認できます。 Okremіモジュールプログラムの出力コード。 アイデアは、メソッドの皮膚の重要な機能のテストを作成することです。 Tseは私が迅速な残響を提出することを許可します、chiは以前にコードへの黒い変更を呼び出しませんでした 回帰そのため、恩赦が現れる前に、プログラムはすでにテストされており、そのような恩赦のより簡単な表明と採用も行われています。

    ウィキペディアから引用された署名。 コードのスキン機能ブロックに対してテストを実行するだけで、すべてのテストに合格するとすぐに、恩赦が認められます(主なランクは、テストが比較的壊れているためです)。

    次に、コードをテストします

    これまでユニットテストを作成したことがない場合は、明らかに、コードをWebサーバーに投稿し、ヨガを開始し、許しを求めて、それらを世界から追い出そうとしました。 このロボット工学の方法は、多くの問題を引き起こします。

    まず、それはもっと退屈で、退屈な忙しさです。 真実の再検証はすでに折りたたみロボットです。すべてが押されたことを確信する必要があるからです。 そして、このプロセスでは、さらに大きな勢いがあり、1つか2つの瞬間を逃す可能性があります。

    別の方法で、そのようなテストを試みるすべてを再試行することはできません。 このような方法の場合、回帰を知ることはすでに困難です。 回帰とは何ですか? あなたがこのコードを書き、それに抗議し、すべての恩赦を訂正したことを示してください。彼らが知っていたように、彼らはコードをサイトに投稿しました。 新しい恩赦と新しい機能の要求についてのPotimkoristuvachnadislavの解説。 コードに目を向け、恩赦を修正し、新しい関数を追加します。 誰と一緒に状況を非難することができますか、古い恩赦が再び現れる場合、いわゆる「回帰」。 すべてを書き直す必要があります。 Ієあなたがあなたの古い恩赦を知らない可能性。 秋の1時間前であろうとなかろうと、初めてヴィクリカンの問題は「回帰」だと思います。 単体テストを試すときは、テストを作成します。 コードが変更されるとすぐに、テストを通じて再度フィルタリングします。 リグレッションが明らかになった場合、テストに合格しなかった場合、そしてあなたは許しを復讐するためのコードの一部として簡単に見つけることができます。 何を変更したかわからない場合は、許しを簡単に修正できます。

    単体テスト(特にWeb開発の場合)のもう1つの利点は、ブラウザー間の混乱に簡単に抗議できることです。 さまざまなブラウザでテストを実行する必要があります。 ブラウザに問題がある場合は、問題を修正してテストを再実行できます。 その結果、すべての主要なブラウザがサポートされ、すべての悪臭を放つ破片がテストに合格したことを確信できます。

    QUnitを使用して単体テストを作成する方法

    Otzhe、QUnitでモジュールテストを書く方法は? 最初のステップは、テストの途中をインストールすることです。

    QUnitテストスイート

    QUnitテストスイート

    テストされるコード、ファイルからの復讐 myProject.js、およびテストはに配置されます myTests.js。 テストを実行するには、ブラウザでHTMLファイルを開く必要があります。 さて、ある種のテストを書く時が来ました。

    モジュラーテストのBudіvelnyブロックєotverdzhennya。

    「堅さはtsevirazであり、コードが勝利したときに変わる結果を予測します。予測が正しくない場合、堅さは次のようになります。 false、恩赦の存在についてvisnovkiを広めることができます。

    vikonannya硬度їхの場合、テストブロックの前に配置する必要があります。

    //この関数をテストしますfunctionisEven(val)(return val%2 === 0;)test( "isEven()"、function()(ok(isEven(0)、 "Zero is a good number"); ok (isEven(2)、 "Two is unpaired"); ok(isEven(-4)、 "Negative chotiri is unpaired number"); ok(!isEven(1)、 "One is unpaired number"); isEven(- 7)、「ヤクと負のシム-対になっていない数」);))

    ここで関数を割り当てます isEven、数値のパリティが逆になるように、関数がパリティ値をローテーションしないように再考したいと思います。

    関数を連続して呼び出します テスト()テストへのブロックのように。 最初のパラメーターは行にあり、結果に表示されます。 もう1つのパラメーターは、アサーションを復讐する方法としての反転関数です。 このコールバック関数は、QUnitの呼び出し時間ごとに1回呼び出されます。

    私たちは5つのソリッドを書きました、私たちは論理的です。 最初のパラメータに値があることを確認するのは論理的です true。 もう1つのパラメーターは、結果の表示方法であるリマインダー値です。

    テスト後に取るものの軸:

    すべてのアサーションが正常に確認されました。この機能を考慮に入れることができます。 isEven() pratsyuєそう、ochіkuvalosとして。

    硬さが間違ったらどうなるのか考えてみましょう。

    //この関数をテストしますfunctionisEven(val)(return val%2 === 0;)test( "isEven()"、function()(ok(isEven(0)、 "Zero is a good number"); ok (isEven(2)、 "Two is unpaired"); ok(isEven(-4)、 "Negative chotiri is unpaired number"); ok(!isEven(1)、 "One is unpaired number"); isEven(- 7)、 "ヤクと負のシム-ペアになっていない数"); //パードンok(isEven(3)、 "スリー-ペアになっていない数");))

    Іテストの結果で考慮に入れる軸:


    非常に許し、ヤクミはnavmisnoを始めました。 しかし、あなたのプロジェクトでは、テストに合格しなかったが、すべてのステートメントが正しいと判断した場合は、許しを示すのが簡単になります。

    その他の困難

    QUnitをサポートするのはok()だけではありません。 他のタイプの硬度、プロジェクトの折りたたみテスト時に手動で振動させる方法を確立します。

    契約の確認

    契約の確認 equals()転送すると、最初のパラメーター(実際の値)は別のパラメーター(有効な値)と同等になります。 硬度はすでに似ています わかった()、しかし侮辱的な意味を示すために-deisneとperedbachuvane、これはコードを改善するのがより簡単であることを意味します。 だから私と同じように わかった(), equals() 3番目のパラメータとして、表示用のメモを取ることができます。

    だから副

    Test( "assertions"、function()(ok(1 == 1、 "1つは1つと同等です");))


    勝つためにスライド:

    Test( "assertions"、function()(equals(1、1、 "one equals one");))


    行の最後にimovirneの意味があるという事実を尊重してください。

    それでも意味は等しくありません:

    Test( "assertions"、function()(equals(2、1、 "one equals one");))


    そのような記録はより多くの情報を与えます。

    パラメータを再チェックするための一致演算子「==」の検証。これは、配列とオブジェクトでは実行できません。

    Test( "test"、function()(equals(()、()、 "pardon、all objects"); equals((a:1)、(a:1)、 "pardon"); equals(、、 "許し、tserіznіmasivi ");

    そのような振る舞いのために、QUnitは確固たるアイデンティティを持っています。

    確かなアイデンティティ

    確かなアイデンティティ 同じ() vikoristovatіwパラメータ equals() Aleは、プリミティブ型だけでなく、配列やオブジェクトでも機能します。 身元の確認を変更するには、正面の銃床からの確認を再確認する必要があります。

    Test( "test"、function()(same(()、()、 "pass、objects display the same content"); same((a:1)、(a:1)、 "pass"); same( 、、 "パス、配列、および同じコンテンツの取得"); same(、、 "pass");))

    何を尊重する 同じ()一致させるためのウィンク演算子「===」。したがって、特別な値を一致させるために手動でウィンクすることができます。

    Test( "test"、function()(equals(0、false、 "true"); same(0、false、 "false"); equals(null、undefined、 "true")); same(null、undefined、 "false");))

    構造

    1つのテストですべてのアサーションを解きほぐすことは悪い考えです。 このようなテストは理解しやすく、テスト結果の評価で混乱する可能性があります。 したがって、テストを構成し、任意の宛先から同じグループの機能へのokreブロック、スキンの硬化を調整する必要があります。

    追加の毎週の機能のために他のモジュールを整理することができます モジュール:

    Module( "モジュールA"); test( "テスト"、function()()); test( "別のテスト"、function()()); module( "モジュールB"); test( "テスト"、function()()); test( "別のテスト"、function()());


    フロントバットでは、すべての硬化が同期して呼び出され、1つずつ叩かれました。 現実の世界には、AJAXリクエストや関数などの非個人的な非同期関数があります setTimeout()і setInterval()。 このタイプの関数をどのようにテストできますか? QUnitには「非同期テスト」と呼ばれる特別なタイプのテストがあり、非同期テストに使用します。

    最も明白な方法でテストを書くことを試みることができます:

    Test( "非同期テスト"、function()(setTimeout(function()(ok(true);)、100)))


    このように見えるので、テストでは毎日の苦労はありません。 強化は同期的でしたが、関数の呼び出しの時点で、テストはすでに完了しています。

    お尻をテストするための正しいオプション:

    Test( "非同期テスト"、function()(//テストを「一時停止」モードに変換しますstop(); setTimeout(function()(ok(true);//呼び出しが完了した後//テスト開始を続行します();)、100)))


    機能を勝ち取りました 止まる()テストをテストするために、そしてテストが完了した後、彼らは追加機能のためにテストを再度実行しました 始める().

    Wiklikの機能 止まる()毎週の行事の直後 テスト()єより広く実践されています。 したがって、QUnitは特別に短縮できます。 asyncTest()。 フロントバットは一目で書き直すことができます:

    AsyncTest( "Asynchronous test"、function()(//テストは自動的に「一時停止」モードになりますsetTimeout(function()(ok(true); //フィードバックが完了した後//テストを続行しますstart() ;)、100))))

    Є一瞬、varto zamylitsya:関数 setTimeout()常に関数を呼び出してから、別の関数(AJAXクエリなど)をテストしてください。 return関数が呼び出されることをどのように確認できますか? 反転機能として、viklikan、機能はありません 始める()クイックコールなしで失われる可能性があり、テスト全体が「送信」されます。


    次のようにテストを整理できます。

    //コールバック関数ajax(successCallback)($ .ajax((url: "server.php"、success:successCallback));)test( "Asynchronous test"、function()(//テストを実行して//話しましょうstart()関数は1秒後に呼び出されないため、ご容赦ください。stop(1000); ajax(function()

    働き 止まる()タイムアウト値が渡されます。 QUnitはプロンプトを削除しました:「これは関数です 始める()タイムアウトの終了後にvyklikanがない場合、次のテストは失敗します。」 これで、テスト全体が「一時停止」されなくなり、事前に、そうではないかのように表示されます。

    次に、さまざまな非同期関数を見てみましょう。 関数を移動します 始める()? 関数にїїを配置する必要があります setTimeout():

    //コールバック関数ajax(successCallback)($ .ajax((url: "server.php"、success:successCallback));)test( "Asynchronous test"、function()(//テストを実行しますstop(); ajax (function()(// ...非同期コールバック))ajax(function()(// ...非同期コールバック))setTimeout(function()(start();)、2000);

    テストを続行する前に、タイムアウト値は両方の機能を循環させるのに十分な場合があります。 機能の1つがビクリカンではない場合、どのようにそれを任命しますか、それはどのようにあなた自身になりますか? 誰のための機能ですか 予想():

    //コールバック関数ajax(successCallback)($ .ajax((url: "server.php"、success:successCallback));)test( "Asynchronous test"、function()(// test stop();//を実行しますQUnitに注意してください。トリプルexpect(3); ajax(function()(ok(true);)))(start();)、2000);

    関数に渡されます 予想() kіlkіst会社、yakіplanuєtsyavikonati。 大空の1つが祝われなくても、計画どおりに失敗したものに関する情報を削除します。

    Єウィキの短いメモ 予想():別のパラメータとして、計画されている硬化量を渡す必要があります テスト()また asyncTest():

    //コールバック関数functionajax(successCallback)($ .ajax((url: "server.php"、success:successCallback));)//明らかに3つのtest( "asynchronous test"、3、function ()(//テストを実行しますstop(); ajax(function()(ok(true);))ajax(function()(ok(true); ok(true);))setTimeout(function()(start ();)、2000);))

    ヴィスノヴォク

    この学校では、QUnitとの仕事の穂軸に必要なすべてのものを持ってきました。 モジュラーテストは、テストする前にコードを再テストするための魔法の方法です。 毎年恒例のテストに勝ったことがないかのように、それを伝える時が来ました。

    Node.jsの簡単な計算プログラムの例。 Mochaフレームワークのヘルプをテストします。

    私たちのプログラムには何が含まれますか:

    • 足し算、見、割り算、掛け算、それが2つの数であろうと。
    • 同じ番号で以前に入力されたので、事前に表示して作業を完了します。
    • インターフェースかもしれません コマンドライン、shob kіntsevykoristuvach即座にプログラムをスピードアップします。

    私たちは何が必要なのか:

    • Node.jsとnpm;
    • JavaScriptの知識:構文とコード構造、データの種類、数学演算、巧妙な言語。

    拡張を目的として、テストと拡張のためのミドルの設定に進むことができます。

    水曜日に行こう

    Node.jsを模倣したシャードでは、ファイルと休閑地のローカルホーニングを作成する必要があります。

    作成 新しいフォルダ 計算。 コマンドラインからtsієїディレクトリに移動し、npminitコマンドを使用して新しいプロジェクトを作成します。作成方法 新しいファイル package.json私たちのプログラムのために。

    パッケージ名、バージョン、説明、およびパッケージに関するその他の情報を入力するように求められます。 名前を入力できます calc.jsそしてさらにエンボス 入る zamovchuvannyamのnadannya値。 テストコマンドを見つけたら、mochaと入力します。これはテストのフレームワーク全体であり、次のようになります。

    テストコマンド:モカ

    必要な情報を入力すると、スクリプトはファイルを作成します package.json、これは次のようになります。

    ("name": "calc.js"、 "version": "1.0.0"、 "description": "Simple Node.jscalculator"、 "main": "index.js"、 "scripts" :( "test ":" mocha ")、"作成者 ":" "、"ライセンス ":" ISC ")

    この段階での最後のステップは、モカのインストールです。 インストールする次のコマンドを入力します。

    npm install --save-dev mocha

    zastosuvannyatsієїコマンドz'appearフォルダーの後 node_modules、 ファイル package-lock.json、ファイルが package.json次の行に表示するには:

    "devDependencies":( "mocha": "^ 4.0.1")

    ファイルを作成する test.js。 モジュールを使用してNode.jsに導入されるまでスピードアップしています 主張する、真と真の等式の有効性を逆転させるために。 Oskilkiの方が正確で、テストは正常に合格できます。

    Const assert = require( "assert"); it( "真になる可能性があります"、()=>(assert.equal(true、true);));

    次に、コマンドラインからテストを実行します。

    $ npm test>mocha✓trueに1回合格(8ms)

    片付けられたかのようにテストに合格したので、途中で終了しました。 からの眺め test.jsすべて、krim row const assert = require( "assert"); 。

    ファイルをツイートします test.jsプログラムを作成するプロセスを拡張することによって。 さらに2つのファイルを作成します。 operations.js算術および検証関数と calc.jsプログラム自体のために。 悪臭が長くなりすぎて折りたためないように、私たちはビコリストブエモをとても豊富に提出しました。 現在のファイルリストの軸:

    • calc.js;
    • node_modules;
    • operations.js;
    • package-lock.json;
    • package.json;
    • test.js;

    プログラムの最初の参照テストを終了しましょう。

    Dodaemoの数学演算

    まず第一に、私たちのプログラムは、2つの数であっても、足し算、見方、割り算、掛け算の罪を犯しています。 また、これらの操作による皮膚の操作は、機能的な機能を生み出すことができます。

    折りたたみから始めましょう。 2つの数値の合計が一意に計算されるテストを作成してみましょう。 以下のコードでは、追加関数add()4のコストが1と3であることを確認しています。

    Const assert = require( "assert"); it( "1と3の合計を正しく知っている"、()=>(assert.equal(add(1、3)、4);));

    npm testコマンドを使用してテストを実行した後、次のようにします。

    > mocha 0合格(9ms)1不合格1)合計1と3を正しく知っている:ReferenceError:追加がContext.it(test.js:5:16)npm ERRで定義されていません! テストに失敗しました。 詳細については、上記を参照してください。

    referenceErrorでテストに失敗しました:addが定義されていません。 他に方法がないため、add()関数をテストするため、このような結果は非常に明確です。

    ファイルのadd()関数を作成しましょう operations.js:

    Const add =(x、y)=>(+ x)​​+(+ y);

    この関数は、2つの引数xとyを取り、合計を回転します。 x + yではなく(+ x)​​+(+ y)と書いたことを覚えているかもしれません。 一方、単項演算子を使用して引数を数値に減らし、導入部が連続するようにします。

    注ここでは、ES6矢印関数と暗黙の回転を追加します。

    Node.jsを使用し、コードを匿名ファイルに分割します。エクスポートコードのmodule.exportsを高速化する必要があります。

    Const add =(x、y)=>(+ x)​​+(+ y); module.exports =(追加)

    ファイルの先頭 test.jsコードzをインポートします operations.js require()の助けを借りて。 操作を変更して関数を模倣するために、operations.add()へのadd()を覚えておく必要があります。

    Const operations = require( "./ operations.js"); const assert = require( "assert"); it( "1と3の合計を正しく知っている"、()=>(assert.equal(operations.add(1、3)、4);));

    テストを実行してみましょう:

    $ npm test>mocha✓合計1と31が合格したことを正しく知っている(8ms)

    これで関数ができ、テストに合格しました。 他の操作の残りの関数も同様の順序で機能し、subtract()、multiply()、divide()のテストを追加することは難しくありません。

    It( "1と3の合計を正しく知っている"、()=>(assert.equal(operations.add(1、3)、4);)); it( "合計-1і-1"を正しく知っている、()=>(assert.equal(operations.add(-1、-1)、-2);)); it( "33і3の違いを正しく知っている"、()=>(assert.equal(operations.subtract(33、3)、30);)); it( "tvir 12と12を正しく知っている"、()=>(assert.equal(operations.multiply(12、12)、144);)); it( "10と2を個人的に知ることは正しい"、()=>(assert.equal(operations.divide(10、2)、5);));

    次に、すべての関数を作成してエクスポートします。 test.js:

    Const add =(x、y)=>(+ x)​​+(+ y); const減算=(x、y)=>(+ x)​​-(+ y); const multiply =(x、y)=>(+ x)​​(+ y); const split =(x、y)=>(+ x)​​/(+ y); module.exports =(加算、減算、乗算、除算、)

    І新しいテストを開始します。

    $ npm test>mocha✓正しい合計1と3✓正しい合計-1と-1✓正しい値33と3✓正しいtvir12と12✓正しいプライベート10と25合格(8ms)

    すべてのテストに合格したので、プログラムの主な機能が正しく機能することを確認できます。 これで、追加の検証を行うことができます。

    検証を追加します

    現時点では、正しい番号を入力して必要な操作を選択すれば、すべて正常に機能します。 しかし、どのように乗り込むか、どのように数と行の合計を知ることを試みるか? プログラムはビコナティ操作を試みますが、数字をチェックするものを通して、NaNを回します。

    Zamіstターンyaksіsnerazumіlіznachennya、議論の導入は数ではないので、プログラムが進歩を示してその仕事を完了するように、別のタスクをvikonateする時が来ました-robit。

    後頭部に関数を書く必要があります。確認できるように、chiєは番号chinіによって導入されます。 補遺は数字でのみ実践できるので、3つの状況を要約することができます。

    1. 導入された犯罪-数字。
    2. 1つのエントリは数値で、もう1つのエントリは行です。
    3. 不快な紹介-行。
    it( "番号が変更されたときに許しを思い出させる"、()=>(assert.equal(operations.validateNumbers( "sammy"、5)、false);)); it( "2つの行が置き換えられたときに許しを思い出させる"、()=>(assert.equal(operations.validateNumbers( "sammy"、 "sammy")、false);)); it( "2つ以下の数値で成功"、()=>(assert.equal(operations.validateNumbers(5、5)、true);));

    validateNumbers()関数は、両方のパラメーターをオーバーライドします。 isNaN()関数は、パラメーターが数値であるかどうかをチェックし、そうでない場合はfalseになります。 それ以外の場合はtrueになり、検証が成功したことを意味します。

    Const validateNumbers =(x、y)=>(if(isNaN(x)&& isNaN(y))(return false;)return true;)

    エンドファイルのmodule.exportsにvalidateNumbersを追加することを忘れないでください。 これで、新しいテストを実行できます。

    $ npm test 1)行数が異なる場合の恩赦について覚えてください✓2行以下の場合の恩赦について覚えておいてください✓2つの数字がある場合の成功==false+期待-実際-true+false

    2つのテストに合格しましたが、1つは失敗しました。 2つの数値の導入の再検証と、2つの行の導入の再検証が成功しました。 その番号の行の導入に関する再検証については言えないこと。

    私たちの関数をもう一度見てみると、次のことに気付くことができます。 恨み関数がfalseと評価されるように、パラメーターをNaNに設定できます。 同じ効果を実現したい場合、パラメータの1つをNaNにしたい場合は、&&を||に置き換える必要があります。 :

    Const validateNumbers =(x、y)=>(if(isNaN(x)|| isNaN(y))(return false;)return true;)

    これらの変更後、npm testを再度実行すると、すべてのテストに合格します。

    ✓行数が異なる場合の恩赦について思い出させる✓2行の数が異なる場合の恩赦について伝える✓2つの数字の数が異なる場合の成功8通過(9ms)

    私たちは、プログラムのすべての機能に抗議しました。 関数は数学演算に成功し、入力を修正します。 最終段階は、coristuvachインターフェースの作成です。

    インターフェースを作成します

    すでに機能が必要な場合もありますが、当面は機能を高速化することはできません。 したがって、インターフェースが必要です。 このプログラムでは、コマンドラインインターフェイスを作成します。

    現時点ではファイル calc.js空の可能性があります。 ここにプログラムを保存します。 最初から関数をインポートする必要があります operations.js:

    Const operations = require( "./ operations.js");

    vicoristインターフェース自体は、Node.jsCLIモジュールのReadlineで使用されます。

    Const readline = require( "readline");

    必要なものをすべてインポートしたら、プログラムを作成できます。 インターフェイスを作成するために、rlchangeを介してアクセスできるreadlineを微調整します。

    Const rl = readline.createInterface((入力:process.stdin、出力:process.stdout));

    まず、プログラムの開始後、koristuvachがバチッティの罪を犯していること-非常に更新され、ビクトリアからの指示。 console.log()を高速化するために:

    Console.log( `Calc.js Node.jsで電卓を入手しました!バージョン:1.0.0。かなりひねりを加えました。家庭教師は2つの数字を入力し、それらを操作するものを選択する必要があります。`);

    まず、電卓の関数自体を見て、console.log()が必要に応じて機能するかどうかを確認しましょう。 プログラムがプロンプトを表示して作業を完了するように、Mizrobimo。 一部の人にとっては、rl.close()メソッドにクイッククリックを追加します。

    プログラムを実行するには、ノードとファイル名を入力します。

    $ node calc.js Calc.js Node.js計算機があります! バージョン:1.0.0。 語彙:koristuvachは、2つの数字を入力し、それらをどのように処理するかを選択する必要があります。

    重要な通知を表示するプログラムは、その作業を完了します。 ここで、coristuvachの導入を追加する必要があります。 前進する必要があります。2つの数字と1つの操作を選択してください。 スキン入力は、rl.question()メソッドによって要求されます。

    Rl.question( "最初の数値を入力してください:"、(x)=>(rl.question( "別の数値を入力してください:"、(y)=>(rl.question( `今後の操作の1つを選択してください))(- )複数(*)サブ(/)あなたの選択: `、(choice)=>(// rl.close();));)); ));

    xを変更すると、最初の数値、y-別の数値、およびchoice-操作が選択されます。 今、私たちのプログラムは入力を求めていますが、お金を取ることから何もしません。

    3回目の紹介の後、数字だけが入力されているかどうかを確認する必要があります。 どの速度で、validateNumbers()関数を使用します。 オペレーターの助けを借りて、番号が入力されているかどうかを確認するつもりはありません。入力されていない場合は、ロボットプログラムを完了します。

    If(!operations.validateNumbers(x、y))(console.log( "数字しか入力できません!プログラムを再起動してください。");

    すべてが正しく入力されている場合は、2番目の操作メソッドである前の作成を実行する必要があります。 可能な限り多くのオプションを処理するために、スイッチウイルス酵素を使用して処理を高速化し、操作の結果を表示します。 不明な操作を選択すると、デフォルトのブロックが表示され、テストを繰り返すように促されます。

    If(!operations.validateNumbers(x、y))(console.log( "数字しか入力できません!プログラムを再起動してください。");)else(switch(choice)(case "1":console.log( `Amount $(x)および$(y)のコストは$(operations.add(x、y))。 `)、ブレーク、ケース"2 ":console.log(`小売$(x)および$(y)のコスト$( operations.subtract(x、y))。 `); break; break; case" 4 ":console.log(` Private $(x)and $(y)one $(operations.divide(x、y))。 `); break; default:console.log("親切にして、プログラムを再起動し、1から4までの数字を選択してください。 "); break;))

    注console.log()関数には、行にタグを付けることができるテンプレート行があります。

    / ** *シンプルなNode.js計算機、Readlineのコマンドラインインターフェイスを使用する*一種の計算機アプリ。 * / const operations = require( "./ operations.js"); const readline = require( "readline"); //インターフェイスを作成するためのVictoryreadlineconst rl = readline.createInterface((input:process.stdin、output:process.stdout)); console.log( `Calc.js Node.js計算機を入力しました!バージョン:1.0.0。クイズ:講師は2つの数字を入力し、それらを操作するものを選択する必要があります。`); rl.question( "最初の数値を入力してください:"、(x)=>(rl.question( "別の数値を入力してください:"、(y)=>(rl.question( `今後の操作の1つを選択してください))( -)乗算(*)送信(/)選択: `、(choice)=>(if(!operations.validateNumbers(x、y))(console.log("数値のみを入力できます!プログラムを再起動してください) 。");)else(switch(choice)(case" 1 ":console.log(` Amount $(x)and $(y)total $(operations.add(x、y))。`); break;ケース"2":console.log( `Retail $(x)and $(y)cost $(operations.subtract(x、y))。`); break; x)and $(y)one $(operations。 multiply(x、y))。 `)、break; split(x、y))。`);、 break;;));

    これでプログラムの準備が整いました。 ついにヨガロボットを考え直そう。 999と1を入力し、実行する操作を選択します。

    $ node calc.js最初の数値を入力:999別の数値を入力:1選択:2コスト999および1コスト998。

    プログラムは正常に作業を完了し、正しい結果が得られました。 さて、あなたはNode.jsを使用して簡単な計算機を作成し、TDD開発の基本を学びました。

    ©2022androidas.ru-Androidのすべて