3

Angular シングル ページ アプリケーションの e2e テストに分度器を使い始めたところです。ログインページでテストを開始しました。これは私が失敗した場合のために書いたテストです

Tesr ケース 1

  it('Login with wrong email', function() {
    loginPage.get();
    loginPage.setEmail('xxxxx@xxxx.com');
    loginPage.setPassword('12345678');
    loginPage.submit()

    expect(browser.getCurrentUrl()).toBe(loginPage.appUrl + '/#/login')
  })

上記のコードは完全に機能します。URL でログインの失敗をテストしています。URL が変更されていない場合は、失敗と見なします。Q1 )これは正しいアプローチですか? エラーメッセージを確認する必要があります。このような例を見たので、url でログインの失敗をテストします。

テスト ケース 2

これは、ログインの成功を確認するためのエラー、テストケースが発生する場所です。

it('Login with correct email', function() {
  loginPage.get();
  loginPage.setEmail('YYYY@YYYY.YY');
  loginPage.setPassword('12345678');
  loginPage.submit()
  expect(browser.getCurrentUrl()).toBe(loginPage.appUrl + '/#/home')
})

上記のテスト ケースは、 を使用しない場合でも完全に機能します。 を使用すると、browser.getCurrentUrl()次のエラーが発生します。getCurrentUrlloginPage.submit()

分度器がページと同期するのを待って 11 秒後にタイムアウトしました。https://github.com/angular/protractor/blob/master/docs/faq.mdを参照してください。次のタスクは保留中でした

この問題をグーグルで調べたところ、多くの解決策が見つかりましたが、どれも機能していないようです。

試したソリューション

  1. 分度器構成ファイルallScriptsTimeoutにを追加しました。getPageTimeout
  2. defaultTimeoutInterval設定ファイルに追加
  3. SOの質問link1、link2 、およびこのgithubの問題に従って、 3つすべてを試しましたが、どれも機能していないようです
  4. timeoutエラーメッセージでグーグル検索したところ、このSOの質問link1、link2見つかりました。動作していないものをすべて試しました

基本的にすべての解決策は、、、を使用するように言っていwaitます。すべてのリターンが約束されているので、私はファッションですべてを試しました. この問題は を使用していることが原因であることがわかりました。どこが間違っているのか教えてください。分度器を使用した e2e テストについて詳しく知りたいです。sleepwaitForAngularthenablebrowser.getCurrentUrl

分度器の基本、ルート変更でどのように機能するか、および$http分度器によって非同期ユーザーアクションがどのように処理されるかを知りたいです。promise などを明示的に使用する必要がありますか?

どんな助けでも大歓迎です。

4

3 に答える 3

4

理想的な世界では、待機を追加するべきではなく、Protractor自然に Angular の準備が整い、一般的にそれと同期して動作するのを待つ必要があります。

現実の世界では、残念ながら、多くの場合、待機を追加する必要があります。browser.sleep()ただし、一般的に避けるべきハードコーディングされた呼び出しよりも、特定の条件を伴う明示的な待機を優先してください。この場合、特定の URL を待機する待機を追加できます。この回答を参照してください。

于 2016-04-18T13:18:28.773 に答える