3

angularJS を使用しており、カルマ ジャスミンで $scope オブジェクトをテストする方法を理解していますが、コントローラー ファイル内の通常の関数と変数をテストするのが困難です

//controller.js
angular.module('myApp').controller('mainCtrl', function ($scope) {
    $scope.name = "bob";

    var aNumber = 34;

    function myFunction(string){
      return string;
    }
});

私がやりたいことは、expect(aNumber).toBe(34); かどうかをテストすることです。

// test.js
describe('Controller: mainCtrl', function () {

  // load the controller's module
  beforeEach(module('myApp'));

  var mainCtrl,
    scope;

  // Initialize the controller and a mock scope
  beforeEach(inject(function ($controller, $rootScope) {
    scope = $rootScope.$new();
    mainCtrl = $controller('mainCtrl', {
      $scope: scope
    });
  }));

  // understand this
  it('should expect scope.name to be bob', function(){
   expect(scope.name).toBe('bob');
  });

  // having difficulties testing this
  it('should expect aNumber to be 34', function(){
    expect(aNumber).toBe(34);
  });

  // having difficulties testing this    
  it('should to return a string', function(){
    var mystring = myFunction('this is a string');
    expect(mystring).toBe('this is a string');
  });


}); 
4

1 に答える 1

4

angularコントローラーで宣言されたプライベート変数をテストしようとしているようです。$scope を介して公開されていない変数は、隠されているためテストできず、コントローラー内の関数スコープでのみ表示されます。プライベート メンバーと javascript に隠されている情報の詳細については、こちらを参照してください。

テストでプライベート フィールドにアプローチする方法は、公開された API を使用してテストすることです。公開されている公開メソッドで変数が使用されていない場合は、変数が使用されていないことを意味するため、変数を保持してテストしても意味がありません。

于 2014-04-15T01:14:06.487 に答える