Angular / Jasmine / Karma - 由于主模块中的$ http调用而无法启动应用程序

时间:2017-07-04 13:16:31

标签: angularjs unit-testing jasmine karma-runner

我在响应API调用(以及常量的相应设置)之后手动引导我的Angular应用程序,因此:

(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。

我无法理解如何模仿这个。当Karma启动应用程序时,正在进行调用时,为此模块创建测试并模拟$http调用并不会修复它。

感觉我需要一个"全球" $http模拟在测试运行器启动时可用。但我可能完全咆哮错误的树。

有没有人有任何想法?谢谢! :)

1 个答案:

答案 0 :(得分:0)

您可以做的是在files:[ 'mysetup.js', ... ]的{​​{1}}中添加一个设置文件。在那里你可以模拟这样的$ http:

karma.conf.js

然后你可以在你的测试中做到:

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