测试没有运行service mock promise (.then)



我尝试创建我的BoardService的模拟。但是,在运行测试时,.then函数没有在controller中运行,但是在运行实际应用程序时,它工作得很好。

测试如下:

beforeEach(inject(function($rootScope, $controller, $q) {
    scope = $rootScope.$new();
    BoardController = $controller('BoardController', {
        $scope: scope,
        board: {
            id: 1,
            tasks: []
        },
        BoardService: {
            addTask: function(data) {
                var defer = $q.defer();
                defer.resolve(1);
                return defer.promise;
            }
        }
    });
}));
it("should add a new task", function() {
    scope.addTask(category, 'this is a new task');
    expect(scope.board.tasks.length).toBe(1);
});

和控制器功能:

$scope.addTask = function(category, task) {
    BoardService.addTask({name: task, category: category.id, boardId: $scope.board.id}).then(function(task_id) {
        // Never reaches here
        $scope.board.tasks.push({id : task_id, name : task, category : category.id, board_id : $scope.board.id});
    });
}

为什么从来没有到达.then函数的注释?

在解决了这个承诺之后,你需要触发一个消化循环,让angular来接收它。

scope.addTask(category, 'this is a new task');
scope.$digest();
expect(scope.board.tasks.length).toBe(1); 

正如我们在IRC上讨论的那样:您需要调用作用域。

最新更新