0

我希望能够定义一个变量,然后在 module.run() 函数内的 respond() 方法中使用该变量。我的 it() 中有这段代码:

    var testValue=randomValue(); // suffice to say, a random value generator
    var httpBackendMock = function() {
        angular.module('httpBackendMock', ['ngMockE2E', 'name.of.app'])
            .run(function($httpBackend) {
                $httpBackend.whenPOST(/.*\/api\/data/).respond(function(method, url, data, headers) {
                    return [200, '<?xml version="1.0" encoding="UTF-8" standalone="yes"?> \
                    <data>'+testValue+'</data>', {}];
                });
....

但是在对象上方定义的testValue变量httpBackendMock在 run() 函数中根本不可见,而是“未定义”。

我的理解是 JS 中的 'var' 定义的变量可用于内部范围的代码,但这不会发生在这里。有没有办法让变量在那里工作?

4

2 回答 2

1

这段代码

var testValue=randomValue();

在 Node 中执行。而这段代码

function() {
    angular.module('httpBackendMock', ['ngMockE2E', 'name.of.app'])
    ...
}

转换为字符串,传递到客户端并在浏览器中执行。

外部函数作用域在内部函数中不可用,这解释了为什么testValueundefined函数httpBackendMock中,如果httpBackendMock函数使用严格模式会抛出错误。

可以传递额外的数据executeScriptaddMockModule额外的参数,这些参数将在客户端可用。

文档中所示,前两个之后的参数被传递给浏览器。

它应该是这样的

var httpBackendMock = function(testValue) {
    angular.module('httpBackendMock', ['ngMockE2E', 'name.of.app'])
    ...
}
...
var testValue=randomValue();
browser.addMockModule('httpBackendMock', httpBackendMock, testValue);
于 2016-08-01T16:29:08.893 回答
0

答案是传入一个嵌套的值数组,并在模拟模块对象的函数签名中添加一个参数。

var httpBackendMock = function(args) {
    var isFoo=args[0];
    var isBar=args[1];
...
browser.addMockModule('httpBackendMock', httpBackendMock, [['foo','bar']]);

在以下位置找到答案: 量角器 addMockModule 附加参数不起作用?

于 2016-08-01T16:16:24.420 回答