Должен ли я проверять вызовы моего сервиса в приглашении BootstrapDialog?
Я использую 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();
});
Я также могу проверить, если, скажем, идентификатор был NAN или Null, и диалог не должен отображаться. Но мне просто любопытно, должен ли я каким-то образом тестировать tankService.deleteInventoryEntry(). Я чувствую, что должен, но значит ли это, что я должен издеваться над всем этим элементом диалога?
Любая помощь, чтобы указать мне в правильном направлении, будет высоко ценится.
Спасибо!
1 ответ
Практическое правило для любого тестирования. Не проверяйте реализацию, но поведение. Например, вы должны проверить, что когда вы заполнили форму и нажали кнопку отправки, она была отправлена вашему API, и что-то произошло в ответ. Тесты должны быть максимально независимыми от части представления (например, была ли форма расположена в модальном или где-то на странице).