2016-07-29 2 views
0

Я хочу, чтобы иметь возможность определять переменную, а затем использовать указанную переменную в методе response() внутри функции module.run(). У меня есть этот код в моем его():Использование переменных в функции httpBackend mock

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 объект не виден внутри функции запуска() на всех, но будет «не определен».

Мое понимание состоит в том, что переменные, определенные в переменной «var» в JS, доступны для внутреннего кода, но этого здесь не происходит. Есть ли способ заставить переменные работать внутри?

+1

'httpBackendMock' не является объектом. Это функция. Пожалуйста, покажите, что с ним происходит. Если он выполняется с помощью 'browser.executeScript (httpBackendMock)', это явно не сработает, поскольку область внешней функции запускается в узле, а область внутренних функций запускается в браузере. – estus

+0

@estus Это от https://docs.angularjs.org/api/ngMockE2E/service/$httpBackend. Я отметил его ngmocke2e, потому что мне, вероятно, нужны люди, знакомые с этой картой. –

+0

В ссылке, которую вы разместили, нет упоминания о функции 'httpBackendMock'. Пожалуйста, покажите, как эта функция вызывается. – estus

ответ

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?

1

Этот кусок кода

var testValue=randomValue(); 

выполняется в узле. И этот фрагмент кода

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

преобразован в строку, передан на клиентскую сторону и выполнен в браузере.

Внешняя функция область недоступна во внутренней функции, это объясняет, почему testValue в httpBackendMock функции undefined, и он выдаст ошибку, если httpBackendMock функция использует строгий режим.

Дополнительные данные могут быть переданы через executeScript и addMockModule дополнительными аргументами, которые будут доступны на стороне клиента.

Как показано in documentation, аргументы после первых двух передаются в браузер.

Это должно быть что-то вроде

var httpBackendMock = function(testValue) { 
    angular.module('httpBackendMock', ['ngMockE2E', 'name.of.app']) 
    ... 
} 
... 
var testValue=randomValue(); 
browser.addMockModule('httpBackendMock', httpBackendMock, testValue); 
Смежные вопросы