我正在使用 BootstrapDialog 来显示一个对话框。如果用户单击删除,它会调用我的服务并将其从数据库中删除。如果他们单击取消,则会关闭对话框。
我正在编写单元测试,这让我感到困惑。对我的服务的调用嵌套得很深,我什至不知道如何让测试知道我正在测试哪条路径。
我在控制器中的代码:
$scope.deleteInventoryEntry = function(id){
//launch dialog
BootstrapDialog.show({
title: 'CONFIRM DELETION',
message: 'Are you sure you want to delete this record?',
closable: false,
type: BootstrapDialog.TYPE_DANGER,
buttons: [{
label: 'Cancel',
action: function(dialog) {
dialog.close();
}
}, {
label: 'Delete',
icon: 'glyphicon glyphicon-remove',
cssClass: 'btn-danger',
action: function(dialog) {
//remove item from database
tankService.deleteInventoryEntry(id).success(function (response) {
//remove item from table if successful
if(response > 0){
//figure out which item to remove from table
var pos = $scope.invTable.filtered.map(function(item) { return item._id; }).indexOf(id);
//remove from table
$scope.invTable.filtered.splice(pos,1);
$scope.selectedItem.lineItems = [];
dialog.close();
//$scope.successGrowl(' QC Deleted Successfully');
}
});
}
}
]
});
};
我的测试
it('prompts on delete inventory item', function(){
spyOn(BootstrapDialog, 'show').and.callThrough();
$scope.deleteInventoryEntry(1);
expect(BootstrapDialog.show).toHaveBeenCalled();
});
我还可以测试说 ID 是 NAN 还是 Null 并且不应该显示对话框。但我只是好奇我是否应该以某种方式测试 tankService.deleteInventoryEntry() 是否被调用。我觉得我应该这样做,但这是否意味着我必须模拟整个对话项目?
任何帮助我指出正确方向的帮助将不胜感激。
谢谢!