Должен ли я проверять вызовы моего сервиса в приглашении 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, и что-то произошло в ответ. Тесты должны быть максимально независимыми от части представления (например, была ли форма расположена в модальном или где-то на странице).

Другие вопросы по тегам