2017-07-04 1 views
0

ich manuell nach der Antwort auf einen API-Aufruf meinen Eckige App Bootstrap (und entsprechende Einstellung eines konstanten), also:

(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']); 
     }); 
    } 

})(); 

Dies verhindert, dass meine Tests ausgeführt werden, da der Aufruf $http nicht verspottet wird.

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 

Wie Sie sehen können, ist der /api/configs Anruf unsurprisingly 404'ing.

Ich kann nicht meinen Kopf herum, wie man das verspotten. Wenn Sie einen Test für dieses Modul erstellen und sich über den $http-Aufruf lustig machen, wird das Problem nicht behoben, da der Anruf gerade erfolgt, wenn Karma die App startet.

Es fühlt sich an, als ob ich einen "globalen" $http Mock brauche, der dem Testläufer zur Verfügung steht, wenn er startet. Aber ich könnte komplett den falschen Baum bellen.

Hat jemand irgendwelche Gedanken? Vielen Dank! :)

Antwort

0

Was Sie tun können, ist eine Setup-Datei, die in files:[ 'mysetup.js', ... ] in karma.conf.js hinzugefügt wird. Dort können Sie die $ http so etwas wie dieses verspotten:

//----mysetup.js---- 
var response = null; 
var replaceHttpGet = function(get){ 
    get.success(response); // or whatever you need 
}; 
//another variable for failure 

und dann können Sie in Ihrem Test tun:

//---in test--- 
var oldHttpGet = $http.get; 
$http.get = replaceHttpGet; 
response = { //mock response }; 
...test... 
$http.get=oldHttpGet; 
Verwandte Themen