在一次角度飞镖测试中不能运行多个NgTestBed

时间:2017-03-18 17:38:57

标签: unit-testing angular dart

我在一个文件中有两个测试方法。但是当我运行它们时,最后一个失败了。

当我尝试在第一行answer.dispatchEvent(new MouseEvent('click'));执行后在浏览器中调试测试时,第二行上的事件监听器不会被激活,好像他们无法收听任何点击事件一样。我也尝试手动点击,行没有像第一行那样改变颜色(使用完全相同的代码)。

import 'dart:html';
import 'package:angular2/angular2.dart';
import 'package:angular_test/angular_test.dart';
import 'package:test/test.dart';

import '...multiple_choice_quiz_component.dart';

@AngularEntrypoint()
void main()
{
    tearDown(disposeAnyRunningTest);

    group('$MultipleChoiceQuizComponent', () {
        test('should add "incorrect" css class to incorrect answer', () async {
            NgTestBed bed = new NgTestBed<MultipleChoiceQuizComponent>();
            NgTestFixture fixture = await bed.create();
            Element answer = fixture.rootElement.querySelector('.quiz-choice:nth-child(2)');
            answer.dispatchEvent(new MouseEvent('click'));
            bool hasClass = answer.classes.contains('incorrect');
            expect(hasClass, true);
        });

        test('should add "correct" css class to correct answer', () async {
            NgTestBed bed = new NgTestBed<MultipleChoiceQuizComponent>();
            NgTestFixture fixture = await bed.create();
            Element answer = fixture.rootElement.querySelector('.quiz-choice:nth-child(3)');
            answer.dispatchEvent(new MouseEvent('click'));
            bool hasClass = answer.classes.contains('correct');
            expect(hasClass, true);
        });
    });

}

这是截图。

screenshot

第一行是第一种测试方法。 answer.dispatchEvent(new MouseEvent('click'));正确执行并且颜色会发生变化。

然而,在具有完全相同代码的第二行上,整个第二行没有响应。就像我说的那样,几乎就像第二行的事件监听器被禁用一样。

事实上,如果我将这两种方法放在不同的dart测试文件中,则两个测试都会通过

为什么我不能将这两个测试放在一个文件中?

1 个答案:

答案 0 :(得分:1)

似乎存在一个错误,disposeAnyRunningTest实际上并没有按照我们的意愿行事。

https://github.com/dart-lang/angular_test/issues/46

这就是为什么当您将测试用例放在单独的文件中时它的行为会有所不同,但是当它们一起运行时它们不起作用。

如果由于某些原因没有妥善处理,测试可能无效。

  • 您正在测试的组件可能存在一个错误,该错误不允许一次在页面上复制多个副本。您是否在任何可能使元素ID仅在有单个实例时才能使用的元素ID?
  • Fixture.rootElement可能有一个错误导致它返回上一个测试中的元素而不是新元素。