【发布时间】:2015-07-26 07:58:55
【问题描述】:
我正在为以下 angular 函数编写 jasmine 测试用例,并收到测试用例失败消息“预期的间谍 [object Object] 已被调用”。
$scope.displayTagModelPopup = function() {
var dialogOptions = {
templateUrl: 'views/mytags.html',
controller: 'TagsCtrl',
size: 'lg',
resolve: {
tagsAvailable: function() {
return $scope.availableTags;
}
}
};
ModalDialogFactory.showDialog(dialogOptions).then(function(result) {
$scope.selectedFields = [];
$scope.selectedFieldIds = [];
angular.forEach(result, function(tag) {
$scope.selectedFields.push(tag);
$scope.selectedFieldIds.push(tag.objectId);
});
});
};
我的 Jasmine 测试用例
it('should call displayTagModelPopup', function() {
var dialogOptions = {
templateUrl: 'views/mytags.html',
controller: 'TagsCtrl',
size: 'lg',
tagsAvailable: [{
objectId: "c647abc7-f651-4df6-880d-cf9fb69cdcb0",
dataFieldName: "author",
shortNamePath: "$.author",
templates: ["HaM sheet"]
}]
};
var spy = jasmine.createSpy(modalDialogFactory, 'showDialog').and.callFake(function(data) {
$scope.tags = [{
objectId: "c647abc7-f651-4df6-880d-cf9fb69cdcb0",
dataFieldName: "author",
shortNamePath: "$.author",
templates: ["HaM sheet"]
}];
return $scope.tags;
});
$scope.displayTagModelPopup();
$scope.$digest();
expect(spy).toHaveBeenCalled();
});
并得到以下错误 “预计间谍 [object Object] 已被调用。 错误:预期的间谍 [object Object] 已被调用。”
我的测试用例有什么问题?我错过了什么吗?
提前致谢!!!
已编辑: 改变了我的 Jasmine 测试用例,如下所示,得到不同的消息 ''undefined' is not a function (evalating 'ModalDialogFactory.showDialog(dialogOptions).then')'
试过是否定义了ModelDialogFactory,但成功定义了ModalDialogFactory.showDialog方法。 仅在调用方法“$scope.displayTagModelPopup();”时获取测试用例失败
it('should call displayTagModelPopup', function() {
spyOn(ModalDialogFactory, 'showDialog').and.callFake(function() {
$scope.tags = [{
objectId: "c647abc7-f651-4df6-880d-cf9fb69cdcb0",
dataFieldName: "author",
shortNamePath: "$.author",
templates: ["HaM sheet"]
}];
return $scope.tags;
});
var dialogOptions = {
templateUrl: 'views/mytags.html',
controller: 'TagsCtrl',
size: 'lg',
tagsAvailable: [{
objectId: "c647abc7-f651-4df6-880d-cf9fb69cdcb0",
dataFieldName: "author",
shortNamePath: "$.author",
templates: ["HaM sheet"]
}]
};
//expect(ModalDialogFactory).toBeDefined();
//expect(ModalDialogFactory.showDialog).toBeDefined();
$scope.displayTagModelPopup();
$scope.$digest();
});
【问题讨论】:
标签: javascript angularjs jasmine karma-jasmine