我正试图解决为什么我需要在$rootScope.$digest()
之前调用$httpBackend.flush()
来让我的测试通过。
如果我不这样做,我会得到Error: No pending request to flush!
这是我的测试:
it('should post a new task to the server', function() {
$httpBackend.when('POST', $rootScope.serverRoot + '/task/create').respond({});
var created = false;
mockBoardService.addTask({name: 'Add dynamic categories'})
.then(function(response) {
created = true;
}
);
$rootScope.$digest();
$httpBackend.flush();
expect(created).toBe(true);
})
它正在调用的服务功能:
this.addTask = function(data) {
return $http.post($rootScope.serverRoot + '/task/create', data);
}
为什么我需要运行$rootScope.$digest
?
答案 0 :(得分:0)
看起来mockBoardService.addTask正在做一些异步工作。如果没有$ digest,它会尝试在异步代码有机会发出请求之前刷新()$ httpBackend请求。 $ digetst()调用让它有时间进行异步工作。正确的方法(使用Jasmine 2.0,在1.3中有点不同)就像是:
it('should post a new task to the server', function(done) {
$httpBackend.when('POST', $rootScope.serverRoot + '/task/create').respond({});
var created = false;
mockBoardService.addTask({name: 'Add dynamic categories'})
.then(function(response) {
created = true;
done();
}
);
$httpBackend.flush();
expect(created).toBe(true);
})
注意'完成'传入'it'中的函数
请参阅http://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support