【发布时间】:2017-10-09 11:06:47
【问题描述】:
我是 jasmine 框架的新手。我已经阅读了一些教程并学习并开始编写单元测试。 '这里面临的一个问题是描述。 我有一个控制器,我可以在其中调用服务调用来获取数据。请参阅下面的代码。
$scope.getEmpInfo = function() {
EmpService.getInfo($scope.empid)
.then(function(data) {
$scope.empData = data;
$scope.populateEmpData($scope.empData);
}, function(reason) {
//do nothing
}
}
现在,我想为上述方法编写一个单元测试。我能够使用 Promise 对 serice 进行间谍活动,但我无法监视 $scope.populateEmpData()。这是我的测试用例。
describe('Emp data', function() {
var d, scope;
beforeEach(function() {
module("emp");
module("emo.info");
});
describe('empcontroller', function() {
beforeEach(inject(function($q,_EmpService_, $controller,$rootScope){
d = $q.defer();
empService = _EmpService_;
spyOn(empService,"getInfo").and.returnValue(d.promise);
scope = $rootScope.$new();
empCtrl = $controller("empController", {
$scope: scope,
});
}));
it('should get the Employee information ', function() {
scope.getEmpInfo();
spyOn(scope,'populateEmpData');
expect(EmpService.getInfo).toHaveBeenCalled();
//Here im getting the error.
expect(scope.populateEmpData).toHaveBeenCalled();
});
});
});
请帮助解决此问题。提前致谢。
【问题讨论】:
-
为什么你不能监视它?
spyOn(scope, 'populateEmpData'); -
@fqhv 感谢您的回复。我忘了添加。我已经添加了,但是测试失败了。
-
当你添加那个错误是什么?
-
我是第一次自己添加的。错误是“预期的间谍 populateEmpData 已被调用。”
-
你永远不会兑现你的承诺。而且你没有在解决它之后调用 scope.$apply() 。所以永远不会调用 promise 回调。
标签: angularjs unit-testing jasmine karma-jasmine