переменный диапазон с использованием жасмина

0

Я пытаюсь проверить функцию от контроллера angularjs.

часть впрыска:

var $scope, $controller;

beforeEach(module('sigfoxSDISApp'));
beforeEach(inject(function(_$controller_, $rootScope, _$log_, _$translate_, _DeviceService_, _$filter_, _translatableIndexFilter_){
    $controller = _$controller_;
    $scope = $rootScope.$new();
    $controller =  $controller('AcquitModalCtrl', {
        $scope: $scope,
        $log: _$log_,
        $translate: _$translate_,
        DeviceService: _DeviceService_,
        $filter_: _$filter_,
        translatableIndexFilter: _translatableIndexFilter_
    });
}));

Тесты:

describe('$scope.getReport', function(){
    this.success = 0;
    this.errors = 0;

    it('returns an object with a type, a title and a report', function(){
        var result = $scope.getReport(this.success, this.errors);
        expect(result.type).toBeDefined();
        expect(result.title).toBeDefined();
        expect(result.report).toBeDefined();
    });

    describe('getting type, report and title when success = 0 and errors = 1', function(){
        this.errors = 1;
        var result = $scope.getReport(this.success, this.errors);

        it('returns a type error', function(){
            expect(result.type).toEqual('error');
        });

        it('returns a report empty string', function(){
           expect(result.report).toEqual(''); 
        });

        it('returns a title which is not empty string', function(){
            expect(result.title).toMatch(/[a-z]/);
        });
    });
});

Первая функция "it" работает нормально. В "получаемом типе, отчете и заголовке при успехе = 0 и ошибках = 1" я получаю следующую ошибку: "TypeError: невозможно прочитать свойство" getReport "неопределенного"

Таким образом, $ scope больше не определяется после первой функции "it". Я не понимаю, почему.

Из документа Жасмин

Вложение описывает блоки

Вызовы для описания могут быть вложенными, со спецификациями, определенными на любом уровне. Это позволяет скомпоновать набор как дерево функций. Перед выполнением спецификации Jasmine спускается по дереву, выполняя каждую функцию beforeEach по порядку. После выполнения спецификации Jasmine выполняет аналогичные функции afterEach.

Теги:
unit-testing
jasmine
nested

1 ответ

0
Лучший ответ

Мне просто нужно добавить beforeEach в каждом описании, чтобы изменить значения переменных и выполнить функцию getReport следующим образом:

describe('$scope.getReport', function(){
  beforeEach(function(){
    this.success = 0;
    this.errors = 0;
  });


  it('returns an object with a type, a title and a report', function(){
    var result = $scope.getReport(this.success, this.errors);
    expect(result.type).toBeDefined();
    expect(result.title).toBeDefined();
    expect(result.report).toBeDefined();
  });

  describe('getting type, report and title when success = 0 and errors = 1', function(){
    beforeEach(function(){
      this.errors = 1;
      this.result = $scope.getReport(this.success, this.errors);
    )}

    it('returns a type error', function(){
        expect(this.result.type).toEqual('error');
    });

    it('returns a report empty string', function(){
       expect(this.result.report).toEqual(''); 
    });

    it('returns a title which is not empty string', function(){
        expect(this.result.title).toMatch(/[a-z]/);
    });
});

});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню