单元测试——如何在Jasmine中测试Angular控制器的局部变量



我有一个带有局部变量的控制器

function IndexCtrl($scope) {
  var pagesById = [];
  loadPages();
  // snip
  function loadPages() {
    // pagesById gets populated
  }
  // snip
}

我想测试pagesById是否正确填充,但我不确定如何从我的it()中获得它。我不需要这个变量在$作用域中,它只是一个中间信息集,所以如果我能避免将它添加到$作用域中,那将是理想的。

it('scope.pages should populated based on pages data.', function() {
    $httpBackend.flush();
    expect(pagesById).toEqualData(mock_page_results);
});

给我

ReferenceError: pagesById is not defined

除了附加到$scope之外,我还有其他选择吗?

在您的jasmine规范中,首先创建控制器:

var ctrl;
beforeEach(inject(function($rootScope, $controller) {
  scope = $rootScope.$new();
  ctrl = $controller('myController', {
     $scope: scope
  });
}));

则可以通过执行ctrl.pagesById访问其属性。当然,而不是做var pagesById,你需要在你的控制器中使用this.pagesById

下面是我在Angular方法中测试局部变量的方法:

//------- Function for getting value of local variables
function getLocalVariable(sLocalVarName, obj, method, args){
    method = method.toString();
    let changedMethod = method.substring(0, method.lastIndexOf("}")) + ";" + "return " + sLocalVarName + "}";
    eval(' changedMethod = ' + changedMethod);
    return changedMethod.call(obj, args)
}
//----------- service
class assignStuffService {
    getAvaliableStuff(shift) {
        const params = {
            agency_id: 0 ,
            start_time: shift.data.shift.start_time,
            end_time : shift.data.shift.end_time
        };
    }
}
//----------- part of spec
it('should set values to "params" object props', () => {
            let shift = {
                data:{
                    shift:{
                        start_time:'',
                        end_time:''
                    }
                }
            };
            let params = getLocalVariable('params',
                                            assignStuffService,
                                            assignStuffService.getAvaliableStuff,
                                            shift);
            expect(params).toEqual({
                agency_id: 0 ,
                start_time: shift.data.shift.start_time,
                end_time : shift.data.shift.end_time
            });
        });

相关内容

  • 没有找到相关文章

最新更新