2015-01-11 4 views
2

Кажется, так просто, но я не могу понять, почему этот простой код не работает.Транспортир addMockModule дополнительные аргументы не работают?

Я добавляю модуль-макет, чтобы издеваться над моим API-интерфейсом в моих тестах Angular E2E. Я использую Protractor 1.6.0. Мне нужно передать дополнительные аргументы в издеваемый модуль, который, согласно документам Protractor, возможен, просто отправив их в качестве дополнительных аргументов. Тем не менее, моя функция утверждает, что она не имеет аргументов ...

var mock = function() { 
    // This is undefined and arguments.length is 0....why??? 
    var env = arguments[0]; 
    var mocks = angular.module('mocks.login', ['MyApp', 'ngMockE2E']); 
    mocks.run(function($httpBackend) { 
    $httpBackend.whenGET(env.apiBase + '/companies').respond([]); 
    }); 
}; 

browser.addMockModule('mocks.login', mock, {apiBase: ""}); 

Если это имеет значение, я делаю это в моем файле конфигурации транспортир в OnPrepare, как я пытаюсь высмеивать API вызовы, используемые во время логин пользователя. Любая помощь приветствуется.

+0

Вы пытались переместить код из 'onPrepare' в транспортир конфигурации для' beforeEach' в вашем наборе тестов? –

ответ

-1

Это работает для меня:

var mock = function(args) { 
    // args.apiBase should be available here 
    var env = args; 
    var mocks = angular.module('mocks.login', ['MyApp', 'ngMockE2E']); 
    mocks.run(function($httpBackend) { 
     $httpBackend.whenGET(env.apiBase + '/companies').respond([]); 
    }); 
}; 

browser.addMockModule('mocks.login', mock, {apiBase: ""}); 
0

Appearantely в арг должен быть передан как массив. Вот как это работает для меня:

 var test = { 
      val1: 'val1', 
      val2: 'val2' 
     }; 
     browser.addMockModule('mockModule', function(args) { 
      angular.module('mockModule', []) 
       .value('TEST', args[0]); 

     }, [test]);