CodeceptJS-NodeJSの最新のend2endテスト

画像


NodeJSの世界には完全な混乱があり、新しいフレームワークが毎日登場し、通常のpackage.jsonの依存関係は数百メガバイト増加し、昨日プロジェクトに追加したライブラリはすでに古くなっています。 また、AngularJS、React、Vue、Emberなどのフロントエンドフレームワークの世界ですでに明示的なお気に入りが概説されている場合、受け入れテストの対象は完全に理解不能です。 各フレームワークは独自の構文とクールな機能を提供し、それぞれに固有の問題のセットがあります。 たとえば、それぞれが独自の方法でブラウザとの対話を実装し、それぞれが異なる方法で非同期と格闘しています。


ああ、この悪名高い非同期性...


はい、非同期はクールですが、エンド2エンドの受け入れテストのコンテキストでは、非同期は永遠の問題です。 テストには線形の形式、一連のコマンドが必要です。ページを開いてボタンをクリックし、必要なテキストを表示します。 JSコンテキストの同様の各コマンドは非同期に実行されるため、一連の呼び出しによって同様の構成が記録されます。


client .url('https://github.com/nightwatchjs/nightwatch') .waitForElementVisible('body', 1000) .assert.visible('.container h1 strong a') 

(すべてのチームが1つに混在しているため、どのチームが利用可能かを理解するのは困難です)


または、複数のyieldまたはawaitを使用します。


 function*() { yield browser.url('http://google.com'); yield browser.click('#link'); var title = yield browser.getTitle() console.log(title); } 

(制御構造が過剰になると、テストが読みにくくなります)。


テストは主にコードですが、機能するだけでなく、読みやすく、更新しやすいものでなければなりません。
理想的には、マネージャーやビジネスアナリストなどの非技術者でも、プロジェクトで何がどのようにテストされているかを正確に理解する必要があります。 end2endテストを低レベルで記述すると、そのような機会が得られなくなります。


上記の問題を解決するために(マルチツールと非同期) CodeceptJSが登場しました。


これは、高レベルDSLテストを記述するためのフレームワークです。 テスト自体は、 webdriverioProtractorNightmareJSから選択する一般的なライブラリのいずれかによって実行されます。 ほとんどの場合、各ライブラリの構文を学ぶ必要はありませんが、既製のユニバーサルAPIを使用します。 CodeceptJSでの簡単なテストは次のとおりです。


 Scenario('search github', (I) => { I.amOnPage('https://github.com/search'); I.fillField('Search GitHub', 'CodeceptJS'); I.pressKey('Enter'); I.see('Codeception/CodeceptJS', 'a'); }); Scenario('register', (I) => { I.amOnPage('https://github.com'); within('.js-signup-form', function () { I.fillField('user[login]', 'User'); I.fillField('user[email]', 'user@user.com'); I.fillField('user[password]', 'user@user.com'); I.click('button'); }); I.see('There were problems creating your account.'); }); 

CodeceptJSでは、テスト用の線形スクリプトをどのように作成できますか? 秘密をお伝えします。新しいチームと新しいチームが追加される、世界中の約束のチェーンが使用されている場所です。 したがって、CodeceptJSは同じPageObjectsを簡単に実装できます。


 Scenario('register', (I, RegisterPage) => { RegisterPage.open(); RegisterPage.register({login: 'User', email: 'user@user.com', password: '123435'}); I.see('There were problems creating your account.'); I.click('Explore'); }); 

したがって、前の例のコマンドを個別に作成されたクラスに転送しました。


実際、読み取り可能であることが判明しました。すべてのコマンドは一人称アクションとして記述され、セレクターは技術情報でコードのオーバーロードを最小限に抑えます。 テストをさらに読みやすくするために何ができるかと思われます。 ロシア語で書きましょう!


 Scenario('  ', () => { ._('http://yandex.ru/referats'); .("  "); ._(''); .(" "); .("  "); }); 

はい、これはトランスパイラーなしでNodeJSで実行できる有効なJSコードです!


構成で既に述べたように、テストを実行するエンジンを簡単に選択できます。 安定した優れたWebドライバーAPIが必要な場合は、 WebDriverIOを使用し、Angularを操作します。Protractorをオンにしテストを3倍高速化し 、Webドライバーを放棄し、Electron内でアプリケーションを起動します。Nightmareを使用します。


もちろん、理解できないものを受け入れて、すべてのエンジンで利用可能なすべてのアクションの完全な実装を記述することはできません。 ただし、CodeceptJSを使用すると、独自の拡張機能を記述し、現在の機能を補完できます。 はい、この方法では、同じwebdriverioの低レベルAPIを少し操作する必要がありますが、必要な機能を実装することで、スクリプトで使用できます。


CodeceptJSには他に何があります:



CodeceptJSのインストール方法は? そんなに難しくない


 [sudo] npm install -g codeceptjs codeceptjs init 

次に、テスト用のドライバー(分度器、webdriverio、Nightmare)のいずれかを選択し、それらのパッケージをインストールする必要があります。 codeceptjs initコマンドはこれに役立ち、最初のテストの書き方を教えてくれます。


ほぼ1年間、CodeceptJSは英国およびブラジルの国有企業によって使用されています。 MITのように無料で無料です。
まだ試していない場合は、素晴らしい機会があります! すでに使用している場合-コメントを書いてください。 また、プロジェクトの開発に参加します。



Source: https://habr.com/ru/post/J319656/


All Articles