今週は分度器を使用した自動テストに入りました。ブランチを構築することは、タイムアウトやその他の問題で最近多くのことが失敗するので、私はより多くを見つけてこれを修正しようとする

自動化されたテストとは何ですか。

自動テストは、正しく設定され、有用であれば、生活が容易になります:)自動テストは、高速なコードをテストするためにソフトウェア/ツールを使用し テストケースをセットアップし、それらはツールを介して実行されます。 あなたがそれらのケースを書いた後、テストするための人間の相互作用は必要ありません。 これは、テストを介して入力データを比較し、実行することができます。最も一般的なテストとその違い。

最も一般的なテストとその違い。

私がこれまでに遭遇した最も一般的な2つのテスト方法は、UnitテストとE2Eテストです。

単体テスト

単体テストは、単一ユニットのテストに焦点を当てています。これについては、関数やコードの小さな部分のように考えてください。あなたは(偽の)サービス、ネットワークやその他のリソースをモックし、分離されたすべてのテストを行います。
Angular KarmaとJasmine frameworkでは、主に単体テストに使用されています。

E2E testing

E2e testingを使用すると、ユーザーのようにGUIを使用できます。ボタン、ページ、メニューの、CRUDをクリックします。 (本番環境ではありません)
Angularを使用したE2Eテストの最も一般的な使用方法は、分度器を備えたSelenium webドライバーです。
コードをテストするには、単体テストを使用すると便利です。あなたのサイトの機能的な使用をテストしたい場合は、E2Eを試してみてください。

なぜテストしますか?

目的は、問題に迅速に遭遇することです。E2Eテストの場合:また、ifaボタンがまだ動作するか、自分でページが読み込まれるかを確認するために画面をクリックしてテストしたくありません。それは多くの作業になり、異なる開発者によって行われる場合は一貫していません。分度器を設定します。

分度器を設定します。

分度器をインストールする方法。分度器をインストールするには、コマンドラインから次のコマンドを実行します。
分度器をインストールするには、次のコマンドを実行します。

npm install -g protractor

webdriver-manager update

webdriver-manager start

テストをビルドします。最初に、テストを作成するために2つのファイル、specファイルとconfigファイルが必要です。
設定ファイルでは、specファイルの場所を設定します。 また、テストに使用するブラウザも含まれていますが、デフォルトはChromeです。Selenium serveraddressは通信するために含まれています。また、フレームワークが設定されています、これはJasmineです。次に、次のようになります。

 // conf.jsexports.config = { framework: 'jasmine', seleniumAddress: 'http://localhost:4444/wd/hub', specs: }

テストを構築するには、ケースを決定する必要があります。 あなたはspecファイルでケースを構築します。 まず、テストが必要なものを決定しますdo.In この場合、ランディングページにウェルカムメッセージが表示されているかどうかを確認します。

 describe('Landing page', () => {let page: YourAppbeforeEach(() => { page = new YourApp() page.navigateTo('/login') }) it('should display welcome message', () => { expect(page.containsElement('#welcome')).toBeTruthy() expect(page.getElementText('#welcome')).toEqual('Welcome') })})

まず、テストするページまたは要素を記述します。 Describeは、testsuiteおよびJasmine構文の名前です。これには、端から端までの流れが含まれています。 この中には”it”テストケースがあります。
その後、あなたは何をする必要があるかを決定します。 ‘It’はJasmineのグローバル関数です。 フローには複数の’it’テストケースを含めることができます。(describe)
この場合、ランディングページにウェルカムメッセージが表示されているかどうかを確認し、期待どおりに利用できるようにします。 (true、toBeThruthy)テキストがランディングページのテキストと同じかどうかも確認します(toEqual(‘yourText’)

Async Await。

JavaScriptは非同期で、最初にどのスクリプトが実行されるのかわかりません。 分度器のフローは同期的であり、ステップは特定の実行順序にあります。 これをクリックしてから、そのボタンをクリックします。
分度器の流れは約束で書かれています。 分度器は、それが完了するまで待機して約束を処理することができます。 async awaitの構文はTypeScriptの構文によく似ています。
非同期関数は’async’と’await’でラップすることができます。
待ちたい行の前にAwaitが使用されます。私のビルドの主な問題は何でしたか?

 describe('Landing page', () => {let page: YourAppbeforeEach(() => { page = new YourApp() page.navigateTo('/login') }) it('should display welcome message',async () => { expect(await page.containsElement('#welcome')).toBeTruthy() expect(await page.getElementText('#welcome')).toEqual('Welcome') })})

私のビルドの主な問題は何でしたか?私のテストはタイムアウトで多くのことに失敗しました。 私はasync awaitを使用しましたが、まだいくつかの問題がありました。 ご覧のとおり、構文はTypeScript async/awaitとほぼ同じです。p>私はこれを見つけました

私はこれを見つけました

protractortest.org サイト。control_flowをオフにすることを忘れないでください。async/awaitと制御フローを混在させることはできません。async/awaitは制御フローを信頼できなくします(github issueを参照)。 したがって、仕様内の任意の場所で非同期/待機する場合は、SELENIUM_PROMISE_MANAGER:false

これを設定に追加し、残りのエラーをデバッグしました。
私はいくつかのテストの間にいくつかの待機/睡眠時間を構築し、それは正常に実行されます。

コメントを残す

メールアドレスが公開されることはありません。