2

起動ロジックで一方向のバインドされたパラメーターを定義する必要があるディレクティブのコントローラーのテストを作成しています。モックされたコントローラーに一方向のバインドされたパラメーターを渡すのに問題があります。テキストにバインドされたパラメーターは問題なく渡されます。

注: 次のコードでは、モジュール インジェクションおよびコードのその他の無関係な部分をスキップします。

以下は、2 種類のパラメーターを使用したディレクティブの定義です。

function DummyDirective() {
  return {
    restrict: 'E',
    scope: {},
    bindToController: 
      oneWay: '&',
      text: '@'
    },
    templateUrl: 'path/to/template.html',
    controller: 'GreatController',
    controllerAs: 'vm'
  };
}

そして、ここにコントローラーがあります:

function GreatController() {
    var vm = this;

    vm.treasure = '';

    activate();

    function activate() {
      vm.treasure = fantastic(vm.oneWay);
    }

    function fantastic(crap) {
      if(crap.stack) return 'gold';
    }
}

テストに関しては:

  var controller, $rootScope, $scope;
  beforeEach(inject(function(_$controller_, _$rootScope_){
    $rootScope = _$rootScope_;
    $scope = $rootScope.$new();

    controller = _$controller_(
      'GreatController',
      {$scope: $scope},
      {text: 'toGoodToBeTrue',
       oneWay: {
         stack: 'lotsOfIt',
       }
      }
    );
  }));

  it('should do the job', function(){
    expect(controller.treasure).toBe('gold');
  });

whiletextは $controller に適切に渡されますが、oneWay定義されておらず、テストは失敗します。また、オブジェクトを返す関数を無駄に渡そうとしました。このドキュメントでは、一方向のバインドされたパラメーターについては説明していません。ディレクティブをテストしてパラメーターをマークアップとして渡すことなく、これを行う方法を知っていますか? 一般的に、私はテストに焦点を合わせ、ディレクティブとそのコントローラーを別々にテストすることを好みます。

4

1 に答える 1