16

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

function IndexCtrl($scope) {
  var pagesById = [];
  loadPages();

  // snip

  function loadPages() {
    // pagesById gets populated
  }

  // snip
}

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

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

给我

ReferenceError: pagesById is not defined

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

4

2 回答 2

16

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

var ctrl;

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

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

于 2013-01-10T23:36:13.177 回答
1

这是我在 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
            });

        });
于 2017-05-12T09:41:03.883 回答