テスト駆動型開発(TDD)の利点はよく知られており、製品の品質と開発効率を向上させています。コードテストを書くたびに、コードの正確性を確保し、将来のコードエラーの可能性を迅速に検出できます。
行動主導型開発(BDD)は、これについてさらに一歩進んでおり、製品が期待に沿って動作するようにコードするだけでなく、製品の動作をテストします。この記事では、キュウリフレームワークを使用してBDDスタイルの自動化された受け入れテストを作成する方法について説明します。キュウリの利点は、テストケースを簡潔な自然言語で記述して、プロジェクトの非技術者による理解を容易に理解できることです。この記事を読んだ後、キュウリがあなたのチームに適しているかどうかを知ることができ、あなた自身の受け入れテストを書き始めることができます。準備ができて?始めましょう!
キーポイントBDD TDDに基づいて、コードではなく製品の動作についてテストされているため、非技術者を含む幅広い利害関係者が理解しやすくなります。
- キュウリは、テストケースを定義するために理解しやすい言語であるGherkinを使用するBDDフレームワークであり、すべての利害関係者がテストプロセスを理解して参加できるようにします。
- gherkin構文構造は、シナリオと機能をテストし、単純な指定を使用して、技術的な実装を指定せずに動作を説明する手順を使用します。
- cucumber.jsは、JavaScriptプロジェクトと統合され、Gherkin定義のテストを実行し、さまざまなプラグインと構成を通じて非同期操作と外部テストツールをサポートします。
- cucumber.js設定には、NPM経由でモジュールのインストール、機能ファイルとステップ定義を見つけて設定すること、およびオプションでは、GruntやGulpなどのビルドスクリプトまたはタスクランナーに統合することが含まれます。
- この記事は、これらの操作の正確性を検証するために簡単なアサーションを使用して、追加と乗算のためのGherkinシナリオのセットアップを示す基本的なキュウリテストの例を提供します。 この記事では、非同期テストのサポート、パラメーター化されたテストのシナリオの概要、テスト機能を強化するための事前条件と事後条件を設定するためのフックなど、Cucumber.jsの高度な機能についても概説しています。
- BDDとTDDの違い
それは主にテストの構造と書き込み方法に反映されています。 TDDでは、コードを書く開発者によってテスト、維持、および理解されます。他の人はテストをまったく読む必要がないかもしれませんが、それはまったく大丈夫です。しかし、BDDでは、機能を書く開発者よりもはるかに多くの人々がテストする必要があります。多くの利害関係者は、QA担当者、製品アナリスト、販売担当者、さらには上級管理職など、製品が正しく動作するかどうかを気にしています。これは、理想的には、製品を理解している人なら誰でも理解できる方法でBDDテストを書く必要があることを意味します。違いは次のとおりです
および:const assert = require('assert'); const webdriver = require('selenium-webdriver'); const browser = new webdriver.Builder() .usingServer() .withCapabilities({'browserName': 'chrome' }) .build(); browser.get('http://en.wikipedia.org/wiki/Wiki'); browser.findElements(webdriver.By.css('[href^="/wiki/"]')) .then(function(links){ assert.equal(19, links.length); // 假设的数字 browser.quit(); });
これらの2つのテストは同じことをしますが、1つは読みやすい自然言語であり、もう1つはJavaScriptとSeleniumを知っている人によってのみ理解されます。この記事では、Cucumber.jsフレームワークを使用してJavaScriptプロジェクトでBDDテストを実装する方法を示し、製品のテストのメリットを製品が恩恵を受けることができます。
キュウリ/ガーキンとは?
キュウリは、行動主導の開発のためのテストフレームワークです。 Gherkin形式のテストを定義し、これらのGherkinsをコードにバインドすることで実行可能にすることができます。 Gherkinは、キュウリのテストの作成に使用されるドメイン固有の言語(DSL)です。これにより、テストスクリプトを読みやすい形式で書き込むことができ、製品開発のすべての利害関係者の間で共有できます。 Gherkinファイルは、Gherkin言語で記述されたテストを含むファイルです。これらのファイルには通常、.featureファイル拡張子があります。これらのガーキンファイルの内容は、通常「ガーキン」と呼ばれます。
gherkin
Gherkinが定義したテストでは、- - これらの手順は実際に実行されるテストです
- 次に - これらの手順は、テスト結果を主張するために使用されます
- 理想的には、各シナリオは別のテストケースである必要があるため、Whenステップの数は非常に小さく保つ必要があります。手順は完全にオプションです。たとえば、何も設定する必要がない場合は、与えられたステップがない場合があります。 Gherkinファイルは、読みやすく、製品開発に関与する人なら誰でも利益をもたらすように設計されています。これには非技術的な人々が含まれるため、Gherkinファイルは専門言語ではなくビジネス言語で常に記述する必要があります。これは、たとえば、単一のUIコンポーネントを参照するのではなく、テストする製品の概念を説明することを意味します。
以下はGherkinの例です。GoogleのCucumber.jsの検索:
このテストは、どうすればよいかではなく、何をすべきかを教えてくれることがすぐにわかります。これは、誰でも理解できる言語で書かれており、最終製品がどのように微調整されていても、正しいままでいる可能性が最も高いです。 GoogleはUIを完全に変更することを決定する場合がありますが、機能が同等である限り、Gherkinはまだ正確です。 Cucumber wikiで与えられたときの詳細については、詳細を読むことができます。
Given I have opened a Web Browser When I load the Wikipedia article on "Wiki" Then I have "19" Wiki Links
cucumber.js Gherkin形式でテストケースを書いた後、それらを実行する方法が必要です。 JavaScriptの世界には、Cucumber.jsというモジュールがあり、これを行うことができます。 javaScriptコードを定義することができます。これは、cucumber.jsがGherkinファイルで定義されたさまざまな手順に接続できます。次に、Gherkinファイルをロードし、各ステップに関連付けられたJavaScriptコードを正しい順序で実行することにより、テストを実行します。たとえば、上記の例では、次の手順があります。
(次のコンテンツは基本的に元のテキストと一致しており、流encyさと読みやすさを維持するためにわずかに調整され、一部の文は同義語に取って代わります)
キュウリを手動で実行するのは比較的簡単であり、次のソリューションはすべて自動的に行う方法はすべて方法であるため、最初に実行できることを確認するのが最善です。インストール後、実行可能ファイルは
キュウリを手動で実行した後、NPMスクリプトとしてビルドに追加すると、単純なケースです。次のコマンド(NPMがそれらを処理するため、完全に適格なパスはありません)を次のように追加するだけです。
終了したら、実行できます:
grunt cucumber.jsテストを実行するためのgruntプラグインが存在します。残念ながら、それは時代遅れであり、Cucumber.jsの新しいバージョンでは機能しません。つまり、使用すると多くの改善が見逃してしまいます。代わりに、私が好む方法は、単にグラントシェルプラグインを使用して上記とまったく同じ方法でコマンドを実行することです。インストール後、構成するだけで、次のプラグイン構成をgruntfile.jsに追加するだけです: さて、以前と同様に、 gulp gulpは、既存のプラグインが時代遅れであり、古いバージョンのキュウリツールを使用するため、Gruntとまったく同じです。繰り返しますが、ここでは、Gulp-Shellモジュールを使用して、他のシナリオと同様にCucumber.jsコマンドを実行できます。セットアップはシンプルです: さて、以前と同様に、 あなたの最初のキュウリテスト この記事のすべてのコード例は、GitHubで見つけることができることに注意してください。 キュウリの実行方法がわかったので、実際にテストを書きましょう。この例では、システムがどのように機能するかを示すために、非常に人工的なことを行います。実際、テストしているコードを直接呼び出す、HTTP API通話を実行しているサービスへのHTTP API呼び出し、セレンの制御してWebブラウザーを駆動してアプリケーションをテストするなど、より複雑なことを行います。私たちの簡単な例は、数学がまだ有効であることを証明します。追加と乗算の2つの特性があります。まず、セットアップしましょう。 テストの実行方法は完全にあなた次第です。この例では、簡単にするために手動でそれを行います。実際のプロジェクトでは、上記のオプションのいずれかを使用してビルドに統合します。 さあ、最初の実際の機能を書きましょう。これは 非常にシンプルで読みやすいです。それは私たちがやっていることを正確に教えてくれます。試してみましょう: (次のコンテンツは基本的に元のテキストと一致しており、流encyさと読みやすさを維持するためにわずかに調整され、一部の文は同義語に取って代わります) 最初のステップファイルを書きましょう。これにより、キュウリの出力が私たちに示すように手順を実装しますが、これは何も役に立たないが、出力を整理する。これは (次のコンテンツは基本的に元のテキストと一致しており、流encyさと読みやすさを維持するためにわずかに調整され、一部の文は同義語に取って代わります)
は次のようになります:
(次のコンテンツは基本的に元のテキストと一致しており、流encyさと読みやすさを維持するためにわずかに調整され、一部の文は同義語に取って代わります)
(以下のコンテンツは基本的に元のテキストと一致しており、流encyさと読みやすさを維持するためにわずかに調整され、一部の文は同義語に取って代わり、一部の章はマージされて簡素化されます)
より高度なcucumber.jsのヒント
それはすべて良いですが、キュウリは私たちの生活を楽にするためにより高度なことをすることができます。
asyncステップ定義 これまでのところ、同期ステップ定義のみを書きました。ただし、JavaScriptの世界では、これは通常十分ではありません。 JavaScriptの多くのことは非同期である必要があるため、それを処理する方法が必要です。ありがたいことに、Cucumber.jsには、好みに応じて、これに対処するためのいくつかの組み込みの方法があります。上記の方法は、非同期の手順を処理するより伝統的なJavaScriptメソッドであり、コールバック関数を使用しています。ステップ定義にコールバック関数が最後のパラメーターとして機能する必要があることを指定すると、このコールバックがトリガーされた後にのみステップが完了すると見なされます。この場合、コールバックが引数でトリガーされた場合、これはエラーと見なされ、ステップは失敗します。パラメーターなしでトリガーされている場合、ステップは成功したと見なされます。ただし、コールバックがまったくトリガーされていない場合、フレームワークは最終的にタイムアウトし、ステップに失敗します。物語の意味?コールバックパラメーターを受け入れる場合は、必ず電話してください。たとえば、コールバックを使用したHTTP API呼び出しのステップ定義は次のとおりです。これは、応答にコールバックを使用するため、リクエストを使用して記述されます。 (次のコンテンツは基本的に元のテキストと一致しており、流encyさと読みやすさを維持するためにわずかに調整され、一部の文は同義語に取って代わります) 別の、より好ましい方法は、タイプを返すことです。ステップから約束を返す場合、ステップは約束が完了したときにのみ完了したと見なされます。約束が拒否された場合、ステップが失敗します。あるいは、返品したコンテンツが約束ではない場合、ステップはすぐに成功したと見なされます。これには、未定義またはnullの返却が含まれます。これは、ステップ実行中に約束を返す必要があるかどうかを選択できることを意味し、必要に応じてフレームワークが調整されます。たとえば、約束を使用してHTTP API呼び出しを作成するためのステップ定義は次のとおりです。これは、回答の約束を返すため、Fetch APIを使用して記述されます。 (以下のコンテンツは基本的に元のテキストと一致しており、流encyさと読みやすさを維持するためにわずかに調整され、一部の文は同義語に取って代わり、一部の章はマージされて簡素化されます)
機能の背景、シーンのアウトライン、データテーブル、フック関数(前、後、beforestep、afterstep、afterstepなど)やイベント処理メカニズムなど、これらの高度な機能は、テスト効率と読みやすさを大幅に向上させることができます。これらの機能を合理的に使用することにより、BDDテストをより簡潔かつ容易に書くことができます。
行動駆動型開発は、製品が適切な動作を持っていることを保証する優れた方法であり、キュウリはツールとしてこれを達成するための非常に強力な方法であり、製品のすべての利害関係者が読み、理解し、さらには書くことさえできるようにするための非常に強力な方法です行動テスト。この記事では、キュウリができることの肌に触れているので、その力を理解するために自分で試してみることをお勧めします。 Cucumberには非常に活発なコミュニティがあり、メーリングリストとGitterチャンネルは、必要に応じてサポートを得るための素晴らしい方法です。すでにキュウリを使用していますか?この記事はあなたがそれを試すことを奨励していますか?いずれにせよ、私は以下のコメントであなたを聞きたいです。 この記事は、Jani Hartikainenによって査読されました。 SitePointコンテンツを最高の状態にしてくれたすべてのSitePointピアレビューアに感謝します! (次のコンテンツは基本的に元のテキストと一致しており、流encyさと読みやすさを維持するためにわずかに調整され、一部の文は同義語に取って代わります) FAQ const assert = require('assert');
const webdriver = require('selenium-webdriver');
const browser = new webdriver.Builder()
.usingServer()
.withCapabilities({'browserName': 'chrome' })
.build();
browser.get('http://en.wikipedia.org/wiki/Wiki');
browser.findElements(webdriver.By.css('[href^="/wiki/"]'))
.then(function(links){
assert.equal(19, links.length); // 假设的数字
browser.quit();
});
これらの意味のすべてについてあまり心配しないでください。後で詳しく説明します。しかし、本質的には、Cucumber.jsフレームワークがGherkinファイルのステップにコードをバインドするために使用できるいくつかの方法を定義します。 Given I have opened a Web Browser
When I load the Wikipedia article on "Wiki"
Then I have "19" Wiki Links
手動で実行します./node_modules/.bin/cucumber.js
Given I have loaded Google
When I search for "cucumber.js"
Then the first result is "GitHub - cucumber/cucumber-js: Cucumber for JavaScript"
。これらのディレクトリは再帰的にスキャンするため、状況に応じてファイルを浅いまたは深くネストできます。 -r
$ ./node_modules/.bin/cucumber.js --help
npmスクリプトpackage.json
以前とまったく同じキュウリのテストを実行します。 Given('I have loaded Google', function() {});
When('I search for {stringInDoubleQuotes}', function() {});
Then('the first result is {stringInDoubleQuotes}', function() {});
$ npm install --save-dev cucumber
const assert = require('assert');
const webdriver = require('selenium-webdriver');
const browser = new webdriver.Builder()
.usingServer()
.withCapabilities({'browserName': 'chrome' })
.build();
browser.get('http://en.wikipedia.org/wiki/Wiki');
browser.findElements(webdriver.By.css('[href^="/wiki/"]'))
.then(function(links){
assert.equal(19, links.length); // 假设的数字
browser.quit();
});
grunt shell:cucumber
を実行してテストを実行できます。 Given I have opened a Web Browser
When I load the Wikipedia article on "Wiki"
Then I have "19" Wiki Links
gulp cucumber
を実行してテストを実行できます。
Given I have loaded Google
When I search for "cucumber.js"
Then the first result is "GitHub - cucumber/cucumber-js: Cucumber for JavaScript"
Given('I have loaded Google', function() {});
When('I search for {stringInDoubleQuotes}', function() {});
Then('the first result is {stringInDoubleQuotes}', function() {});
features/addition.feature
:$ npm install --save-dev cucumber
steps/maths.js
:const assert = require('assert');
const webdriver = require('selenium-webdriver');
const browser = new webdriver.Builder()
.usingServer()
.withCapabilities({'browserName': 'chrome' })
.build();
browser.get('http://en.wikipedia.org/wiki/Wiki');
browser.findElements(webdriver.By.css('[href^="/wiki/"]'))
.then(function(links){
assert.equal(19, links.length); // 假设的数字
browser.quit();
});
defineSupportCode
フックは、さまざまな状況に使用されるコードを提供できるCucumber.jsの方法です。これらはすべてカバーされますが、基本的に、キュウリが直接呼び出すコードを書きたいときはいつでも、これらのブロックの1つにある必要があります。ここでのサンプルコードは、いつ、いつ、いつ、いつ、1つはいつ、1つは、3つの異なるステップを定義していることがわかります。各ブロックには、属性ファイルのステップと一致する文字列(または必要な場合は正規式)と、そのステップが一致するときに実行される関数が与えられます。プレースホルダーは、ステップストリングに配置できます(または、正規式を使用している場合は代わりにキャプチャ式を使用します)。これらのプレースホルダーは抽出され、関数の引数として提供されます。これを行うと、実際には何もしないで、よりクリーンな出力が得られます。
steps/maths.js
Given I have opened a Web Browser
When I load the Wikipedia article on "Wiki"
Then I have "19" Wiki Links
実行するようになります:World
以上がJavaScriptのBDD:キュウリとガーキンを始めましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

10の楽しいjQueryゲームプラグインして、あなたのウェブサイトをより魅力的にし、ユーザーの粘着性を高めます! Flashは依然としてカジュアルなWebゲームを開発するのに最適なソフトウェアですが、jQueryは驚くべき効果を生み出すこともできます。また、純粋なアクションフラッシュゲームに匹敵するものではありませんが、場合によってはブラウザで予期せぬ楽しみもできます。 jquery tic toeゲーム ゲームプログラミングの「Hello World」には、JQueryバージョンがあります。 ソースコード jQueryクレイジーワードコンポジションゲーム これは空白のゲームであり、単語の文脈を知らないために奇妙な結果を生み出すことができます。 ソースコード jquery鉱山の掃引ゲーム

このチュートリアルでは、jQueryを使用して魅惑的な視差の背景効果を作成する方法を示しています。 見事な視覚的な深さを作成するレイヤー画像を備えたヘッダーバナーを構築します。 更新されたプラグインは、jQuery 1.6.4以降で動作します。 ダウンロードしてください

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

この記事では、JQueryとAjaxを使用して5秒ごとにDivのコンテンツを自動的に更新する方法を示しています。 この例は、RSSフィードからの最新のブログ投稿と、最後の更新タイムスタンプを取得して表示します。 読み込み画像はオプションです

Matter.jsは、JavaScriptで書かれた2D Rigid Body Physics Engineです。このライブラリは、ブラウザで2D物理学を簡単にシミュレートするのに役立ちます。剛体を作成し、質量、面積、密度などの物理的特性を割り当てる機能など、多くの機能を提供します。また、重力摩擦など、さまざまな種類の衝突や力をシミュレートすることもできます。 Matter.jsは、すべての主流ブラウザをサポートしています。さらに、タッチを検出し、応答性が高いため、モバイルデバイスに適しています。これらの機能はすべて、物理ベースの2Dゲームまたはシミュレーションを簡単に作成できるため、エンジンの使用方法を学ぶために時間をかける価値があります。このチュートリアルでは、このライブラリのインストールや使用法を含むこのライブラリの基本を取り上げ、


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

メモ帳++7.3.1
使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

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

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ホットトピック



