Тесты не выполняются, когда изменения объема / дайджесты происходят в разных тестовых блоках - PullRequest
0 голосов
/ 02 февраля 2019

Я "восстанавливаю" некоторые директивные тесты для проекта AngularJS 1.6.x.Первоначально они были добавлены много лет назад, редко затрагивались, в конце концов удалялись, но сейчас я возвращаю их и очищаю.

Я заметил, что некоторые тесты разделяют scope между it функциями.Раньше это работало, но больше не работает.Хотя я не хочу делиться областью больше, мне нужно лучше понять проблему, прежде чем я продолжу.

В приведенном ниже тесте я связываю значение scope.test с буквой,Это работает.Я обновляю свойство и $digest в следующем тесте, но он не проходит:

AssertionError: expected 'a' to equal 'b'

Но меня смущает то, что точные те же тесты работают нормально/ пройти при выполнении с таким же it тестом .

Почему?

  • Объект scope не затрагивается / сбрасывается между тестами
  • Значение scope.test действительно b
  • Шаблон не был перекомпилирован случайно
  • it методы должны выполняться в порядке

Пример полного автономного теста:

describe('test', () => {
    let scope;
    let $compile;
    let $rootScope;
    let $template;

    // Compile helper
    const compileTemplate = (scope, template) => {
        const $elem = $compile(angular.element(template))(scope);
        scope.$digest();

        return $elem;
    }

    beforeEach(() => {
        inject((_$compile_, _$rootScope_) => {
            $compile = _$compile_;
            $rootScope = _$rootScope_
        });
    });

    it('test 1', () => {
        scope = $rootScope.$new();
        scope.test = 'a';

        $template = compileTemplate(scope, '<div>{{ test }}</div>');

        expect($template.text()).to.equal('a'); // passes
    });

    it('test 2', () => {
        scope.test = 'b';
        scope.$digest();

        expect($template.text()).to.equal('b'); // fails
        // AssertionError: expected 'a' to equal 'b'
    });

    // this does test 1 and 2 all together
    it('test 3', () => {
        scope = $rootScope.$new();
        scope.test = 'a';
        $template = compileTemplate(scope, '<div>{{ test }}</div>');
        expect($template.text()).to.equal('a'); // passes

        scope.test = 'b';
        scope.$digest();
        expect($template.text()).to.equal('b'); // passes
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...