我正在用 Angular 编写端到端测试,我想验证一个 DOM 元素相对于另一个 DOM 元素的位置。幸运的是,Angular E2E DSL 为 jQuery 的 offset() 方法提供了一个直通方法。非常适合我的用例!
但是,我很困惑如何使用此方法返回的对象。对 offset() 的调用返回一个具有top和left属性的对象。当我尝试在测试中访问这些属性时,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 对象的值,这样我就可以将其用作其他期望的基础?