Я "восстанавливаю" некоторые директивные тесты для проекта 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
});
});