Как написать угловой тест дротика с макетом и когда предложение - PullRequest
0 голосов
/ 30 января 2019

В настоящее время я портирую приложение Angular 4.0 Dart 1.x на Angular 5.2 Dart 2.1.Большая часть этого работала нормально, но я изо всех сил пытаюсь заставить мои тесты компонентов работать.

Ниже приведен код, который я перенес, проблема в том, что мне нужен класс mock, поле .action которого также является классом mock.Поэтому я связываю доступ с when(mockRegattaStore.action).thenReturn(mockRegattaActionHelper);

. Если я получаю доступ к полю mockRegattaStore.action сразу после этого, то он возвращает мне экземпляр макета.Но если мой компонент обращается к нему в своем конструкторе, он возвращает ноль.Как будто инжектор дает мне новый экземпляр mockRegattaStore.Затем я попытался напечатать хэш-код mockRegattaStore, но он всегда равен 0.

Здесь ссылка на оригинальный рабочий тест https://github.com/sturmf/regatta-angular2/blob/master/frontend/test/event_list_test.dart

А здесь порт https://github.com/sturmf/regatta-angular2/blob/port_to_dart_2.1/frontend/test/event_list_test.dart

[...imports left out...]
@GenerateInjector([
  ClassProvider(Router, useClass: MockRouter),
  ClassProvider(RegattaStore, useClass: MockRegattaStore),
  ClassProvider(RegattaActionHelper, useClass: MockRegattaActionHelper),
])
final InjectorFactory rootInjector = self.rootInjector$Injector;

void main() {
  final injector = InjectorProbe(rootInjector);
  final testBed = NgTestBed.forComponent<EventListComponent>(ng.EventListComponentNgFactory, rootInjector: injector.factory);
  NgTestFixture<EventListComponent> fixture;
  EventListComponentPO testPO;

  tearDown(disposeAnyRunningTest);

  test('EventListComponent list contains dummy event', () async {
    final mockRegattaStore = injector.get<MockRegattaStore>(RegattaStore);
    final mockRegattaActionHelper = injector.get<MockRegattaActionHelper>(RegattaActionHelper);

    when(mockRegattaStore.state.events)
        .thenReturn({'-K2ib4H77rj0LYewF7dP': new Event('-K2ib4H77rj0LYewF7dP', 'Dummy Event')});
    when(mockRegattaStore.state.eventList).thenReturn(['-K2ib4H77rj0LYewF7dP']);
    when(mockRegattaStore.action).thenReturn(mockRegattaActionHelper);

    fixture = await testBed.create();
    final context = HtmlPageLoaderElement.createFromElement(fixture.rootElement);
    testPO = EventListComponentPO.create(context);

    final items = testPO.items;
    expect(items, hasLength(1));

    final element = items[0].getElementsByCss('.event-item-name').first;
    expect(element.visibleText, equals('Dummy Event'));
  });
}

Дополнительно я также использую файл utils.dart из примера героев для InjectorProbe.

...