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

Я строю httpg ackend ngMock в тесте транспортира.

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);
    });
};

Функция init:

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

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

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

$http.get('/path/to/file.json').success(function(json) {
  // other httpBackend code here
});
Другие вопросы по тегам