我在响应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
模拟在测试运行器启动时可用。但我可能完全咆哮错误的树。
有没有人有任何想法?谢谢! :)
答案 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