私は分裂器で書かれた私の最後の2-endテストでJasmineを使用しています。私は私のソリューションで定義された他のページオブジェクトの基本クラスとして使用されるページオブジェクト抽象化を作成しようとしています。ジャスミン非同期テストの問題
私のアプリケーションは古典的なフォームベースのソリューションなので、編集ページの一般的な動作をベースクラスに集めることができます。 M **パターンにもっと近づけるには、抽象ビューとコンクリートモデルを接続したいと思います。
だから私の基本ページオブジェクト・ビューは、次のようになります。
Texport class EditPageBase<T> {
constructor(T model) {
this.model = model;
}
fillForm() {
...
}
checkForm() {
...
}
}
- このビューに関連したクラスモデル。
このアプローチでは、モデル構造を使用して、自分のビューに直接マッピングできます。したがって、モデルで定義されたプロパティは、私の見解では対応表現を持っています。
だから私はビューに私のモデルをマッピングするために、次の構文を使用できます。
for(let prop in this.model) {
let ctrl = this.getControl(prop);
ctrl.sendKeys(this.model[prop]);
}
は、だから私のフォームがいかに複雑で重要ではありません - 私は私のモデルが正しい定義にのみ必要です。
私は、ページデータを要求するときに分度器が約束を返すよう、フォームのデータをチェックして経験する問題:
for(let prop in this.model) {
let ctrl = this.getControl(prop);
expect(ctrl.getAttribute('value')).toEqual(this.model[prop] || '');
}
このコードの時間を時間をスロー:
A Jasmine spec timed out. Resetting the WebDriver Control Flow.
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
これがなぜ起こるか私はアイデアを持っています私のループは早く終わり、約束が解決されるからです。私はこのような状況に対処する方法を知らない。ジャスミンが約束通りに動作するので、私は約束チェーンや他のPromise.all
ラッパーを作成したくないので、ここでコードをきれいにしておきたい。
誰かが以前にこの問題を抱えていた可能性があります。ここでジャスミンパワーを使用する方法をいくつか考えてみましょう。
ためJasmine docsを参照してください応答をいただき、ありがとうございます。はい、私は 'done'について知っていますが、これは私が必要とするものではありません。私はループ内ですべての約束を待つ必要があり、これまでは関数の実行が終わっていないという問題があります。 Jasmineは 'done'コールバックがなくても約束しています。 – VadimB