从量角器进入工厂

时间:2016-10-17 18:18:59

标签: angularjs protractor

您好我的应用程序中有小工厂( myFactory ):

.factory('myFactory', ['$q',  function ($q) {

      function myMethod() {
        .....
      }

      return {
        myMethod: myMethod
      };
}]);

我想在量角器测试中访问 myFactory.myMethod(),所以在onPrepare()我正在使用

browser.executeScript(function() {
    return angular.element(document).injector().get('myFactory'); 
}).then(function (myFactory) {
    console.log('myFactory: ', myFactory);
    myFactory.myMethod();
});

for console.log('myFactory:',myFactory)我看到我得到了对象:

myFactory:  { 
    myMethod: {}
}

然后对于 myFactory.myMethod(); 我看到错误: TypeError:object不是函数

任何人都知道如何从量角器访问工厂以便能够执行方法吗?

1 个答案:

答案 0 :(得分:1)

我使用服务通过Protractor访问我的应用程序中的用户信息,我继续使用它尽可能接近你的代码,我上面的评论应该是你的解决方案。这是更长的解释:

所以我们有一个服务Users,它有一个名为getCurrent()的函数,它将检索当前用户的信息。所以我第一次尝试类似于你的代码:

browser.executeScript(function () {
    return angular.element(document.body).injector().get('Users');
}).then(function (service) {
    console.log(service); // logs object which has getCurrent() inside
    service.getCurrent(); // error, getCurrent() is not a function
});

这记录了Users对象,并包含了函数getCurrent(),但是当我尝试链接调用service.getCurrent()时遇到了同样的错误。

DID对我有用,只是将.getCurrent()移动到执行脚本中。即。

browser.executeScript(function () {
    return angular.element(document.body).injector().get('Users').getCurrent();
}).then(function (service) {
    console.log(service); // logs John Doe, john.doe@email.com etc.
});

因此,将此应用于您的案例,以下代码应该有效:

browser.executeScript(function() {
    return angular.element(document).injector().get('myFactory').myMethod(); 
}).then(function (myFactory) {
    console.log(myFactory); // this should be your token
});

只是一个小的FYI,因为它值得你也可以通过将一个字符串传递给executeScript来编写这段代码:

browser.executeScript('return angular.element(document).injector().get("myFactory").myMethod()').then(function (val) {
    console.log(val);
});