В настоящее время я портирую приложение 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.