Javascript jasmine单元测试模拟承诺
我在测试我的承诺单元测试时遇到问题 我提出了一个名为“expect(scope.test).toBe(12);”的断言。 这在承诺中,然后在我的代码中返回 下面是我要测试的实际代码:Javascript jasmine单元测试模拟承诺,javascript,angularjs,unit-testing,jasmine,karma-jasmine,Javascript,Angularjs,Unit Testing,Jasmine,Karma Jasmine,我在测试我的承诺单元测试时遇到问题 我提出了一个名为“expect(scope.test).toBe(12);”的断言。 这在承诺中,然后在我的代码中返回 下面是我要测试的实际代码: $scope.getBudgets = function(){ BudgetService.getBudgets().then(function(response) { $scope.test = 12; }, function(response) { }); } de
$scope.getBudgets = function(){
BudgetService.getBudgets().then(function(response) {
$scope.test = 12;
}, function(response) {
});
}
describe('budgetOverviewCtrl tests', function() {
beforeEach(module('app'));
beforeEach(module('ngRoute'));
var ctrl, scope, deferred;
describe('budgetOverviewCtrl with test', function() {
beforeEach(inject(function($controller, _$rootScope_) {
scope = _$rootScope_.$new();
ctrl = $controller('budgetOverviewCtrl', {
$scope: scope
});
}));
it('Should check if getBudgets service promise exists and returns as expected', inject(function($injector, $q, BudgetService) {
BudgetService = $injector.get("BudgetService");
deferred = $q.defer();
deferred.resolve({"Hello": "World"});
spyOn(BudgetService, 'getBudgets').and.callFake(function() {
return deferred.promise;
});
scope.getBudgets();
expect(BudgetService.getBudgets).toHaveBeenCalled();
**//Below line isnt called - this is inside the promise then.**
expect(scope.test).toBe(12);
}));
});
});
下面是我的单元测试:
$scope.getBudgets = function(){
BudgetService.getBudgets().then(function(response) {
$scope.test = 12;
}, function(response) {
});
}
describe('budgetOverviewCtrl tests', function() {
beforeEach(module('app'));
beforeEach(module('ngRoute'));
var ctrl, scope, deferred;
describe('budgetOverviewCtrl with test', function() {
beforeEach(inject(function($controller, _$rootScope_) {
scope = _$rootScope_.$new();
ctrl = $controller('budgetOverviewCtrl', {
$scope: scope
});
}));
it('Should check if getBudgets service promise exists and returns as expected', inject(function($injector, $q, BudgetService) {
BudgetService = $injector.get("BudgetService");
deferred = $q.defer();
deferred.resolve({"Hello": "World"});
spyOn(BudgetService, 'getBudgets').and.callFake(function() {
return deferred.promise;
});
scope.getBudgets();
expect(BudgetService.getBudgets).toHaveBeenCalled();
**//Below line isnt called - this is inside the promise then.**
expect(scope.test).toBe(12);
}));
});
});
在测试中调用
scope.getBudgets()
之后,似乎缺少对$rootScope.$apply()
的调用。在Angular中,promise success和error回调作为摘要周期的一部分运行,必须从测试中手动触发