2016-05-04 15 views
1

私は、分度器を使用してAngular 1.5アプリケーションのエンドツーエンドテストを作成しています。このアプリケーションを使用すると、標準のinput type="file"コントロールとsubmitボタンを使用してファイルを選択することで、バックエンドWeb APIにファイルをアップロードできます。ユーザーがsubmitボタンをクリックしたときに約束が解決される前後に値を検証する方法は?

function exampleController() { 
    var vm = this; 

    vm.status = ""; 
    vm.buttonClickHandler = buttonClickHandler; 

    function buttonClickHandler() { 
     vm.status = "calling"; 
     service.makeAsyncCall() 
       .then(function() { 
        vm.status = "success"; 
       }, function() { 
        vm.status = "error"; 
       }); 
    } 
} 

buttonClickHandlerが呼び出された:私は基本的にこのように振る舞うコントローラーを持っています。

ユーザーがボタンをクリックしたときに状態が「呼び出し」に変化し、約束が解決されたときに「成功」​​に変化することを確認する突起子を使用してエンドツーエンドのテストを作成するにはどうすればよいですか?私の試みのほとんどで

、私はvm.statusが「成功」に設定されていたことを確認でき、または私はそれはときに私はignoreSynchronization = trueを設定した場合、「呼び出し」が、後者のみ作品に設定されたことを確認できました私はWeb APIのバックエンド呼び出しで人工的な遅延を作ります。そうでなければ、プロセスは明らかに速すぎて、値は「成功」を示します。

+1

を任意のはありますUI側で「ステータス」が変わることを示す? – alecxe

+0

@alecxeはい、UIは、私が望む 'status'の変更を正しく示しています。私は自動化されたテストでそれらをキャプチャしているようには見えません。 – Daan

+0

コントローラー内のフィールドにアクセスする代わりに、ステータステキストを持つ要素、またはロードスピナーを確認できますか?ありがとう。 – alecxe

答えて

1

これは、かなり醜いですサクサク、それは悪い習慣だが、私はとにかく試してください:)

it('click test', function() { 
    $('button').click(); 

    browser.wait(function() { 
     // Polls 'as fast as possible' until it evalutes to truthy value 
     // This might be flaky if 'calling' status is shorter than 
     // 1 polling interval (whose length can't be determined) 
     return $('div_containing_status').getText().then(function (status) { 
      return /calling/.test(status); 
     }); 
    }, 10000); 

    expect($('div_containing_status').getText()).toBe('calling'); 

    browser.wait(function() { 
     return $('div_containing_status').getText().then(function (status) { 
      return /success/.test(status); 
     }); 
    }, 10000); 

    expect($('div_containing_status').getText()).toBe('success'); 
}); 

UPDATE与えるだろう:@alecxeコメントに基づいてポーリングについて編集した情報

+0

実際、['browser.wait()'の明示的な "ポーリング頻度"はありません(http://stackoverflow.com/questions/33704000/controlling-poll-frequency-of-browser-wait-fluent-wait )。しかし、私はあなたの考えを理解し、これが確実に機能するかどうかは疑問です。ありがとう。 – alecxe

+0

興味深いことに、500ms情報はどこから来るのだろうか:) 23:15:18.976 INFO - 実行中:[現在のURLを取得] 23:15:18.990情報 - 完了:[現在の状態を取得する] 23:15:18.997情報 - 実行中:[現在のURLを取得] 23:15:19.006情報 - 完了:[現在のURLを取得] 23:15:19.028情報 - 実行中:[現在のURLを取得] 23:15:19.044情報 - 完了:[現在のURLを取得] 23:15:19.074情報 - 実行中:[現在のURLを取得] 23:15:20.384情報 - 完了:[現在のURLを取得] – finspin

+0

ええ、500 ms PythonやJavaのような他のセレンの言語バインディングのデフォルトのポーリング頻度ですが、そこで設定できます。 – alecxe

関連する問題