Использование переменных в пробной функции 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 дополнительные аргументы не работают?