Angular / Jasmine / Karma - не удается запустить приложение из-за вызова $http в основном модуле
Я вручную загружаю свое приложение Angular после ответа на вызов API (и соответствующей установки константы), таким образом:
(function() {
var myApp = angular.module('myApp');
// Bootstrap the app once we've got a config
var initInjector = angular.injector(['ng']);
var $http = initInjector.get('$http');
$http.get('/api/configs').then(
function(response) {
myApp.constant('myConfig', response.data);
bootstrapApp();
},
function(error) {
console.log('Unable to get config', error);
}
);
function bootstrapApp() {
angular.element(document).ready(function() {
angular.bootstrap(document, ['myApp']);
});
}
})();
Это мешает моим тестам запускаться как $http
вызов не высмеивается.
04 07 2017 14:05:53.965:WARN [karma]: No captured browser, open http://localhost:9876/
04 07 2017 14:05:53.987:INFO [karma]: Karma v1.3.0 server started at http://localhost:9876/
04 07 2017 14:05:55.169:INFO [Chrome 59.0.3071 (Linux 0.0.0)]: Connected on socket /#y-gZChEZ25VdBB7YAAAA with id manual-6637
04 07 2017 14:05:56.270:WARN [web-server]: 404: /api/configs
Как видите, /api/configs
звонок неудивительно 404'ing.
Я не могу понять, как это высмеивать. Создание теста для этого модуля и высмеивание $http
вызов не исправляет это, поскольку вызов выполняется, когда Карма запускает приложение.
Такое ощущение, что мне нужен "глобальный" $http
макет, который доступен для бегуна при запуске. Но я мог лаять совсем не на том дереве.
У кого-нибудь есть мысли? Спасибо!:)
1 ответ
Что вы можете сделать, это иметь установочный файл, который добавляется в files:[ 'mysetup.js', ... ]
в karma.conf.js
, Там вы можете посмеяться над $http примерно так:
//----mysetup.js----
var response = null;
var replaceHttpGet = function( get ){
get.success( response ); // or whatever you need
};
//another variable for failure
и тогда вы можете сделать в своем тесте:
//---in test---
var oldHttpGet = $http.get;
$http.get = replaceHttpGet;
response = { //mock response };
...test...
$http.get=oldHttpGet;