我有一个AngularJS应用程序在测试中遇到一些问题。
方式
PlanService.prototype.getPlanList = function() {
this.activeRequest = true;
return this.PlanFactory.planList().then((function(_this) {
return function(response) {
_this.plans = response.plans;
return _this.activeRequest = false;
};
})(this));
};
return PlanService;
单元测试:
var planService;
beforeach(function() {
module("notRealModuleName");
inject(function(PlanService) {
planService = PlanService;
});
});
...(other tests)
it('should get a list of plans', function() {
var $httpBackend;
inject(function($injector) {
$httpBackend = $injector.get('$httpBackend');
});
var plans = {"plans": [array of stuff goes here]};
$httpBackend.whenGET('/plans/special').respond(plans);
var promise = planService.getPlanList();
promise.then(function(response) {
expect(response).toBeDefined();
expect(planService.plans).toBeDefined();
});
$httpBackend.flush();
});
执行此测试时,将返回错误Error: Unexpected request: GET http://ip_address/plans/special No more request expected
。如果我注释掉httpBackend.flush
,则测试通过。但是,如果我将expect(planService.plans)
更改为不存在的方法,则不会失败。显然,期望没有被称为。这有什么问题?
答案 0 :(得分:2)
错误:
Error: Unexpected request: GET http://ip_address/plans/postpaid No more request expected
表示实际上没有对该网址进行过调用,首先请仔细检查您测试的网址。
在测试中,为了执行承诺,你必须调用$ rootScope。$ digest(); (为了避免异步测试,与$ httpBackend上存在flush方法的方式相同),如果你添加测试应该失败,因为promise将被执行。