我正在为我们的应用程序编写一些测试,并且我已经包含了angularjs-mocks.js,所以我可以使用它附带的漂亮的dsl函数。
但是我不想实际模拟$ http请求,因为我正在将这个应用程序与客户端的后端集成在一起,而且后端不断变化,我想测试真实的响应。
在这种情况下,使用真正的http后端的最佳(最简单)方法是什么?
修改
我找到了一个潜在的解决方案,就是使用它:
$httpBackend.whenPOST(/.*/).passThrough()
但正如我在下面提到的那样,它不起作用,可能会坏掉?我收到这个错误:
Error: Unexpected request: POST /some/url/here No more request expected
我在这里打开了一个问题:https://github.com/angular/angular.js/issues/1434
答案 0 :(得分:2)
我找到了解决问题的快速而肮脏的方法:注释掉覆盖$ httpBackend的行(angular-mocks-1.0.2.js中的1365)。
angular.module('ngMock', ['ng']).provider({
$browser: angular.mock.$BrowserProvider,
$exceptionHandler: angular.mock.$ExceptionHandlerProvider,
$log: angular.mock.$LogProvider,
//$httpBackend: angular.mock.$HttpBackendProvider,
$rootElement: angular.mock.$RootElementProvider
}).config(function($provide) {
$provide.decorator('$timeout', function($delegate, $browser) {
$delegate.flush = function() {
$browser.defer.flush();
};
return $delegate;
});
});
这可能会破坏别的东西,但它让我测试我需要测试的东西,并且不影响生产应用程序,所以对我来说没关系。希望将来会有一种内置的方法来实现这一目标。