javascript - AngularJS, Jasmine : Testing a controller function calling a service using $http

标签 javascript angularjs unit-testing testing jasmine

我正在尝试测试一个使用服务 Controller 。但是,service 目前是 null,因为我想在 controller 中隔离测试。

这是当前的测试,它不起作用,因为 BoardServicenull

beforeEach(inject(function($rootScope, $controller) {

    scope = $rootScope.$new();

    BoardController = $controller('BoardController', { 
        $scope: scope,
        board: {id: 1, tasks: {}},
        BoardService: null
    });

}));


it ("should add a new task", function() {

    var tasksBefore = scope.board.tasks.length;

    scope.addTask(category, 'this is a new task');

    var tasksAfter = scope.board.tasks.length;

    expect(tasksAfter).toBe(tasksBefore + 1);
});

这是来自 Controller 的 addTask() 函数:

$scope.addTask = function(category, task) {

    BoardService.addTask({name : task, category : category.id}).success(function(task_id) {
        // Removed code for simplicity
    });

}

Aaa 最后,service 中的函数:

this.addTask = function(data) {
    return $http.post($rootScope.serverRoot + '/task/create', data);            
}

最佳答案

我认为这个想法是模拟一个BroadService...所以可能是...

beforeEach(inject(function($rootScope, $controller) {

    scope = $rootScope.$new();
    var boardService = {
         addTask:function(task){
            var d = $q.defer();
            d.resolve(/*Whatever your service function returns: if its just a task_id, return an int or something*/);
            return d.promise;
         };
    };

    BoardController = $controller('BoardController', { 
        $scope: scope,
        board: {id: 1, tasks: {}},
        BoardService: boardService
    });

}));


it ("should add a new task", function() {

    var tasksBefore = scope.board.tasks.length;

    scope.addTask(category, 'this is a new task');
    scope.$apply();
    var tasksAfter = scope.board.tasks.length;

    expect(tasksAfter).toBe(tasksBefore + 1);
});

关于javascript - AngularJS, Jasmine : Testing a controller function calling a service using $http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23908498/

相关文章:

javascript - SVG 标记在不同屏幕上呈现不同

javascript - 为什么这不是一个有效的链式函数?

angularjs - 使用 '=' 范围和controllerAs 的 Angular 指令

javascript - 我如何使用 jest 在 vuejs 中测试计算属性?

javascript - Jquery.Validate 表单顶部的错误消息

mysql - 获取字符串数据作为 Json 数据

javascript - Angular 找不到我的 Controller

.net - 由于动态组装,Assembly.GetManifestResourceNames() 异常

c# - 如何使用内部任务对 void 方法进行单元测试

javascript - 从 jQuery AJAX 动态创建 Bootstrap 下拉列表不起作用