Использование переменных в пробной функции httpBackend

Я хочу иметь возможность определить переменную, а затем использовать эту переменную в методе response () внутри функции module.run(). У меня есть этот код внутри моего 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 (), но будет неопределенным.

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

2 ответа

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

var testValue=randomValue();

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

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

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

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

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

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

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

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

Ответ заключается в том, чтобы передать вложенный массив значений и добавить аргумент в сигнатуру функции объекта mockmodule.

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

Нашли ответ по адресу: Protractor addMockModule дополнительные аргументы не работают?

Другие вопросы по тегам