繁体   English   中英

量角器:无法访问父函数中定义的闭包中的变量

[英]Protractor: Can not access variables in closure defined in parent function

我在我的一个JS文件中有以下代码。

// test/lib/UserHelper.js

'use strict';
var Firebase = require('firebase');

exports.createUser = function (email, password) {
  browser.executeAsyncScript(function (done) {
    var $firebaseSimpleLogin = angular.inject(['ng', 'firebase']).get('$firebaseSimpleLoging');
    var firebaseRef = new Firebase('https://urltoapplication.firebaseio.com');
    var auth = $firebaseSimpleLogin(firebaseRef);

    auth.$createUser(email, password);

    done();
  });
};

我在我的测试中称之为:

// test/settings/company.spec.js

'use strict';
var user = require('../lib/UserHelper');

describe('company specs', function () {

  beforeEach(function () {
    user.createUser('test@test.com', 'test');
  });
});

user.createUser('test@test.com', 'test');的调用user.createUser('test@test.com', 'test'); beforeEach回调失败时出现UnknownError: email is not definedauth.$createUser(email, password); UnknownError: email is not defined auth.$createUser(email, password);

为什么回调函数中无法访问email变量? 是否可以传播传递给关闭函数的参数传递给createUser函数?


根据Andres D的回答,这对我有用。

exports.createUser = function (data) {
  browser.executeAsyncScript(function (data, done) {
    var $firebaseSimpleLogin = angular.inject(['ng', 'firebase']).get('$firebaseSimpleLoging');
    var firebaseRef = new Firebase('https://urltoapplication.firebaseio.com');
    var auth = $firebaseSimpleLogin(firebaseRef);

    auth.$createUser(data.email, data.password);

    done();
  }, data);
};

这是我在角度聚会期间使用的一个工作示例:

您只能将一个参数传递给executeAsyncScript。 如果您需要传递多个值,我建议您传递一个对象:

module.exports = {
  create: function(data) {
    return browser.executeAsyncScript(function(data, callback) {
      var api = angular.injector(['ProtractorMeetupApp']).get('apiService');
      api.member.save(data, function(newItem) {
        callback(newItem._id);
      })
    }, data);
  }
};

create({email: 'sdf@sdf.com', password: 'sfd'}).then(function(response){
  // Handle response here.
})

https://github.com/andresdominguez/protractor-meetup/blob/master/test/e2e/api-helper.js#L12

这里的问题是executeAsyncScript实际上是在运行selenium的浏览器中执行的,因此不会通过它传递来自上述范围的变量。

我不确定是否有人知道通过这种方式传递变量的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM