1

Angular JS Jasmine 単体テスト ケースの作成中にエラーが発生しました:-

未定義のプロパティ '$broadcast' を読み取れません

私のコード:-

    $scope.$on('getVersionData', function (event, data) {
    getVersion(data.RegistrationId, data.FacilityCode);
});

私のユニットテストコード

    beforeEach(inject(function ($rootScope, $injector) {
    $scope = $rootScope.$new();
    $rootScope = $injector.get('$rootScope');
    spyOn($rootScope, '$broadcast').and.callThrough();
    $controller = $injector.get('$controller');

}));
it('Controller: getVersion: Checking if $scope variable set to expectedValues', function () {
    $rootScope('getVersionData', [{ RegistrationId: 7946531, FacilityCode: 'L' }]);
    expect($rootScope.$broadcast).toHaveBeenCalledWith('getVersionData', [{ RegistrationId: 7946531, FacilityCode: 'L' }]);


});

コードを手伝ってください。

4

2 に答える 2

2

まず、二重注入します$rootScope が、問題の根本的な原因は、ブロックで$rootScope未定義であり、 beforeEach クロージャーでのみ定義されていることです。後でブロックで使用できるように、レベルで定義する必要がありますit$rootScopedescribeit

describe('whatever', function () {
    var $rootScope = null //define $rootScope on describe level

    beforeEach(inject(function (_$rootScope_, _$injector_) {
        $rootScope = _$rootScope_; //assign injected $rootScope to the variable from describe so it's available in tests
        $injector = _$injector_;
        $scope = $rootScope.$new();
        spyOn($rootScope, '$broadcast').and.callThrough();
        $controller = $injector.get('$controller');
    }));
});
于 2016-11-07T12:25:26.057 に答える