角度 - 材料 - 测试 - $ mdSidenav

时间:2015-04-06 17:56:40

标签: angularjs testing jasmine material

我第一次在Stack上写一个问题;) 我有一个问题要测试$ mdSidenav(角度材料组件。请参阅https://material.angularjs.org/)。 在我的控制器中,我有类似的东西:

$scope.toggleRight = function() {
    $mdSidenav('right').toggle();
};

我想测试一下。所以在我的测试文件中,我首先创建了一个这个对象的模拟:

var $mdSidenav = function(test){
        return {
            toggle: function(){
                return true;
            }
        };
    };

    beforeEach(inject(function ($controller) {
        $scope = $rootScope.$new();
        createController = function () {
            return $controller('headerCtrl', {
                '$scope': $scope,
                '$mdSidenav': $mdSidenav
            });
        };
    }));

然后我试图测试它:

describe('toggleRight method', function(){
        beforeEach(function(){
            spyOn($mdSidenav('right'), 'toggle').and.callThrough();
        });

        it('Should toggleRight open/close', function(){
            $scope.toggleRight();
            expect($mdSidenav('right').toggle).toHaveBeenCalled();
        });

    });

但业力发给我这个错误:

  

错误:期待间谍,但得到了功能。

我希望有人可以帮助我;)

1 个答案:

答案 0 :(得分:1)

您可以尝试不同的方法,使用$ provide和匿名模块来注入模拟。

我在这里使用sinon,但你可以改为适当的Jasmine代码:

var spy = sinon.spy();

beforeEach(module(function ($provide) {
  $provide.value('$mdSidenav', function (v) {
    return {
      toggle: spy
    }
  });
}));

然后在测试中:

sinon.assert.calledOnce(spy);