Jasmine test:在测试中将angularjs控制器的变量显示为未定义



>我无法在测试用例中获取变量,它在测试用例中显示未定义。控制器:

   $scope.sample = function(){
      var id="151201";
      });

测试:

var ctrl, scope, ;
  beforeEach(inject(
    function($controller, $rootScope){
 scope = $rootScope.$new();
      scope.$digest();
  ctrl = $controller('controller', {
        $scope:scope
      });
  describe('scope functions', function() {
    it('sample', function() {
        expect(id).toBe('151201')
    });
});

收到错误:期望未定义151201

1( 在初始化控制器之前不调用测试本身中的$scope.digest()。 摘要通常调用观察者,由于您尚未初始化控制器并创建 $scope.id,因此在此之前运行摘要没有意义。即使在控制器中,我也怀疑您是否有一个更改值的事件,因为没有其他服务($http(正在使用。

2(如果你有一个控制器,你有$scope.id = "test",你需要测试它的全部是:

 expect($scope.id).toEqual("test");

P.S. $scope.sample = function(({ var id = "12321321"} 你不能那样做。首先是因为 id 变量对于示例函数是私有的。您既不将其分配给$scope也不分配给。另一件事是,您可能想将其分配给$scope因此它将是:

$scope.sample = function(){
   $scope.id = "12345";
}
#the test will look like 
it('should assign id', function(){
  $scope.sample();     
  expect($scope.id).toEqual("12345");
})

并删除

$digest()

在之前调用每个语句。

测试 ID 中的

定义,则需要获取控制器的作用域 ID。

尝试

expect(ctrl.$scope.id).toBe('151201')

或者只是控制台.log(Ctrl(并查找范围。 也许它不是$scope,而只是范围。

编辑:

expect($scope.id).toBe('151201')

也应该通过你的测试。

最新更新