0

初めてスタックに関する質問を書いています;) $mdSidenav (Angular マテリアル コンポーネント。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();
        });

    });

しかし、カルマは私にこのエラーを送ります:

エラー: スパイを予期していましたが、機能を取得しました。

誰かが私を助けてくれることを願っています;)

4

1 に答える 1

1

You could try a different approach, use $provide and an anonymous module to inject the mock.

I'm using sinon here, but you can change to the appropriate Jasmine code:

var spy = sinon.spy();

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

Then in the test:

sinon.assert.calledOnce(spy);
于 2015-04-13T16:26:54.703 に答える