2015-05-22 8 views
2

Я строю ngMock httpBackend в тесте Protractor.Динамически загружать JSON для ngMock httpBackend response в Protractor

var mockJson = require(projectRoot + 'mock/load.json'); 

var mockResource = function() { 
    angular.module('aMockObject', ['myApp', 'ngMockE2E']) 
    .run(function($httpBackend) { 
     $httpBackend.whenGET('a/path').respond(mockJson); 
    }); 
}; 

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

Однако код $ httpBackend фактически выполняется в контексте браузера, а не в контексте сценария Protractor, поэтому переменная mockJson не определена.

Есть ли другой способ сделать эту работу? Все, что я мог подумать, это какой-то инъецированный тег скрипта для загрузки json-файла в контексте браузера.

ответ

2

Вы можете передавать данные между транспортиром и приложением с addMockModule:

file.json

{ 
    some_property: 'value' 
} 

aMockObject.js:

exports.module = function (data) { 
    angular.module('aMockObject', ['myApp', 'ngMockE2E']) 
    .run(function($httpBackend) { 
     $httpBackend.whenGET('a/path').respond(data); 
    }); 
}; 

Функция инициализации:

var aMockObject = require('aMockObject');  
var file = require('file.json');  
browser.addMockModule('aMockObject', aMockObject.module, file); 
+0

Удивительно простой. Удивленный я раньше не встречал этого решения. – helion3

1

Ну, загрузка json напрямую работает.

// Allow JSON 
$httpBackend.whenGET(/.*\.json$/).passThrough(); 

$http.get('/path/to/file.json').success(function(json) { 
    // other httpBackend code here 
});