如何在angularjs的phonegap中使用jasmine调用函数



我用茉莉花做测试。

有这样简单的angular模块和数组

var todoApp = angular.module('todoApp', []);
todoApp.controller('todoCtrl', function ($scope) {
    $scope.todoList = [
    {done : true, title : 'Item 1'},
    {done : false, title : 'Item 2'}, 
    {done : false, title : 'Item 3'}
    ];
    $scope.addNewTodo = function (newTitle) {
        $scope.todoList.push({done: false, title : newTitle});
        $scope.newTitle = '';
    }
}

和我想通过茉莉测试中的addNewTodo函数推送新项目

所以我写了这样的jasmine测试代码

describe('angularTdd', function () {
    beforeEach(module('todoApp'));
    beforeEach(inject(function ($rootScope, $controller) {
        scope = $rootScope.$new();
        controller = $controller('todoCtrl', {$scope:scope});
    }));
    it('addNewTodo should add newTitle', function () {
        spyOn(scope, 'addNewTodo');
        scope.addNewTodo('Item 4');
        expect(scope.addNewTodo).toHaveBeenCalled();
        // alert(scope.todoList[0].title);
        expect(scope.todoList.length).toEqual(4);
    });
});

我调用了带有'Item 4'参数的addNewTodo函数和

expect(scope.addNewTodo).toHaveBeenCalled() line is passed during test 

所以我期望todoList。长度为4.

但基于网络。长度不会更改为4。还是3

如果你监视某个东西,它不会用它的实际代码调用原始方法,除非你用.andCallThrough()方法显式地指定它。测试的it部分看起来像这样:

it('addNewTodo should add newTitle', function () {
    spyOn(scope, 'addNewTodo').andCallThrough(); //<--- this is important
    scope.addNewTodo('Item 4');
    expect(scope.addNewTodo).toHaveBeenCalled();
    // alert(scope.todoList[0].title);
    expect(scope.todoList.length).toEqual(4);
});

最新更新