【问题标题】:Accessing Angular inside Protractor Test在量角器测试中访问 Angular
【发布时间】:2014-01-04 08:00:55
【问题描述】:

是否可以像在单元测试中那样在量角器测试中访问角度?

用例是我有一个转换文本的服务,我想访问该服务来转换实际测试脚本中的一些数据。我知道量角器中有addMockModule 方法,但我不知道如何将它用于此目的。

不胜感激!

【问题讨论】:

    标签: javascript angularjs testing protractor


    【解决方案1】:

    有一个函数叫做evaluate()。在 dom 中找到一个元素,然后运行表达式。

    例如。如果您想计算http://angularjs.org/ 网站(在添加一些控件下)中的待办事项数量,请执行以下操作:

    在量角器中打开元素浏览器

    ./node_modules/protractor/bin/elementexplorer.js
    browser.get('http://angularjs.org/')
    element(by.model('todoText')).evaluate('todos.length').
      then(function(count) {
        console.log(count)
      });
    

    它应该给你一个 2

    你也可以使用executeAsyncScript

    browser.executeAsyncScript(function(callback) {
      // Here we use document.body, but your app may live under a different
      // element.
      var service = angular.element(document.body)
          .injector()
          .get('myService');
      service.query({}, function(data) {
        callback(data);
      });
    }).then(function (output) {
      console.log(output);
    });
    

    查看示例:https://github.com/andresdominguez/protractor-meetup/blob/master/test/e2e/api-helper.js

    【讨论】:

    • 知道了,我试试executeAsyncScript。第一个似乎是为了在范围内更多地执行简单的事情。
    • github上protractor-meetup提供的例子非常好,非常感谢。
    • 请注意,第二个变体实际上创建一个新的注入器。这可能会导致如下错误:Unknown provider: $rootElementProvider 在根 DOM 元素(设置 ng-app 的位置)上使用 angular.element([DOM element]).injector().get('myService'); 来获取现有的注入器。
    • 我们不再使用这种技术。我会更新答案。
    • 在 e2e 测试中访问除视图之外的任何内容是一种好习惯吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2020-12-09
    相关资源
    最近更新 更多