Angularjs 角形/茉莉花/因果报应-可以';由于主模块中的$http调用,无法启动应用程序

Angularjs 角形/茉莉花/因果报应-可以';由于主模块中的$http调用,无法启动应用程序,angularjs,unit-testing,jasmine,karma-runner,Angularjs,Unit Testing,Jasmine,Karma Runner,我在响应API调用(以及相应的常量设置)后手动引导Angular应用程序,因此: 这会阻止我的测试运行,因为没有模拟$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

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

这会阻止我的测试运行,因为没有模拟
$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
调用并不能解决此问题,因为Karma启动应用程序时正在进行调用

感觉上我需要一个“全局”
$http
mock,它在测试运行程序启动时可用。但我可能完全找错了方向


有人有什么想法吗?谢谢!:)

您可以做的是在
karma.conf.js
中的
文件:['mysetup.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;
//---in test---
var oldHttpGet = $http.get;
$http.get = replaceHttpGet;
response = { //mock response };
...test...
$http.get=oldHttpGet;