3

Angularでエンドツーエンドのテストを作成していますが、別のDOM要素との関係でDOM要素の位置を確認したいと思います。幸い、Angular E2E DSLには、jQueryのoffset()メソッド用のパススルーメソッドがあります。私のユースケースに最適です!

ただし、このメソッドが返すオブジェクトの使用方法がわかりません。offset()を呼び出すと、プロパティがtopleftのオブジェクトが返されます。テストでこれらのプロパティにアクセスしようとすると、Angularは文句を言います。

このコードはうまく機能します:

expect(element("#anID").offset()).toEqual({"top":100,"left":100});

このコードは機能せず、エラーをスローします。

expect(element("#anID").offset().top).toEqual(100);

TypeError: Cannot read property 'name' of undefined
    at Object.angular.scenario.matcher.(anonymous function) (http://localhost:8000/test/angular/angular-scenario.js:23994:41)
    at Object.executeStatement (http://localhost:8000/test/angular/angular-scenario.js:23960:30)
    at Object.chain.(anonymous function) [as toEqual] (http://localhost:8000/test/angular/angular-scenario.js:23968:37)
    at Object.<anonymous> (http://localhost:8000/test/E2E-scenarios.js:78:53)

offset()からの戻り値を使用して、おおよそ次のような期待値を作成するにはどうすればよいですか。

expect(element("#anID").scrollTop() - element("#anotherID").offset().top).toEqual(100);

アップデート

Josh David Millerと行ったり来たりした後、私の本当の質問は、expect()呼び出しの外でangular.scenario.Futureオブジェクトの値を取得して、他の期待の基礎として使用できるようにする方法です。 ?

4

2 に答える 2

3

Angular メーリング リストで回答を見つけました。このようなものは、単一の期待値で複数の angular.scenario.Future オブジェクト値を使用する場合に機能します。

  it('async expectation', function() {
    browser().navigateTo('index.html');
    var relativeElement = element("#anID").prop( 'offsetTop' )

    this.addFuture('ScenarioRunner step title', function(done) {
      expect(element('#anotherID').scrollTop()).toEqual(relativeElement.value - 100);
      done();
    });
  });

これをよりエレガントに ScenarioRunner に統合するために、 Angular github リポジトリで問題が解決されていません。

于 2013-02-11T21:40:36.100 に答える
2

実際には jQuery パススルーは必要ありません。これはうまくいくはずです:

expect( element.prop( 'offsetLeft' ) ).toEqual( 361 );
expect( element.prop( 'offsetTop' ) ).toEqual( 451 );

そうでない場合は、jsfiddle または plunker に完全な最小限の例を投稿できますか?

于 2013-01-28T20:41:56.707 に答える