在httpBackend mock函数中使用变量

时间:2016-07-29 23:18:08

标签: angularjs mocking protractor ngmocke2e

我希望能够定义一个变量,然后在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()函数中可见,但是将会定义为&#39;。

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

2 个答案:

答案 0 :(得分:1)

这段代码

var testValue=randomValue();

在Node中执行。这段代码

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

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

外部函数范围在内部函数中不可用,这解释了testValue函数中undefinedhttpBackendMock的原因,如果httpBackendMock函数使用严格,则会抛出错误模式。

其他数据可以通过executeScriptaddMockModule个额外参数传递,这些参数将在客户端提供。

如图所示in documentation,前两个参数传递给浏览器。

应该是

var httpBackendMock = function(testValue) {
    angular.module('httpBackendMock', ['ngMockE2E', 'name.of.app'])
    ...
}
...
var testValue=randomValue();
browser.addMockModule('httpBackendMock', httpBackendMock, testValue);

答案 1 :(得分:0)

答案是传入一个嵌套的值数组,并为mockmodule对象的函数签名添加一个参数。

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

找到答案: Protractor addMockModule additional arguments not working?