我不想让$ http嘲笑。主要原因是我正在编写一些集成测试,所以我想要执行所有的AJAX请求。目前在我的测试中没有被触发。 任何建议都受到欢迎。
答案 0 :(得分:0)
如果您确实需要测试异步操作,则可以使用Jasmine Async Support。它主要包括创建runs()
和waitsFor
的块。一个简单的例子:
var $http, returned;
it('should evaluate real XHR request', function() {
// this will probably reside in your controller
$http.$get('/foo.json').success(function(data) { returned = data; });
waitsFor(function() {
return !!returned;
}, 'The $http didnt resolved in 1 second', 1000);
runs(function() {
expect(returned).toBe('The value you expect to be returned');
});
});
每个runs
块将按指定的顺序运行,当waitsFor
发生时,运行块将等到上一个waitsFor
解析为true
以运行。
答案 1 :(得分:0)
当您使用Jasmine测试时,角度模拟提供模拟的$ httpBackend,但实际的$ httpBackend仍然存在。您只需要告诉提供程序在注入服务时使用原始文件。它会在你的测试中看起来像这样:
var original_http_backend = null;
angular.module('ng').config(['$httpBackendProvider', function($httpBackendProvider) {
original_http_backend = $httpBackendProvider;
}]);
beforeEach(module(function($provide) {
$provide.provider('$httpBackend', original_http_backend)
}));
值得指出的是,这种方法通常是测试前端代码的一种不好的方法。这是因为它添加了后端依赖项,因此您无法隔离前端行为。最好嘲笑响应并用它进行测试。
我最终使用了这个功能,因为我们的模拟响应是在后端开发的,用于测试,我不想重复这些对象。这种方法允许我使用它们。