您好我的应用程序中有小工厂( 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不是函数
任何人都知道如何从量角器访问工厂以便能够执行方法吗?
答案 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);
});