Я работаю над приложением Angular 2-rc3, и у меня настроено несколько юнит-тестов, и они работают, ура! Я просто не понимаю, почему они должны быть написаны именно так. И что еще более удивительно, все < a href="https://medium.com/google-developer-experts/angular-2-unit-testing-with-jasmine-defe20421584#.xwz347m87" rel="nofollow noreferrer"> примеры I см. имеют тот же подход. В частности, эти вопросы находятся в верхней части моего списка:
Почему
TestComponentBuilder
настраивается в каждом юнит-тесте?it('shows list of blog items by default', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { return tcb .overrideProviders(BlogRoll, [provide(BlogService, { useValue: mockBlogService })]) .createAsync(BlogRoll) .then((fixture) => { // actual test code }); });
Это уже семь дополнительных строк кода на юнит-тест, и от этого сильно страдает читабельность моего кода. Я попытался поместить это в
beforeEach()
:beforeEach(inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { console.log('beforeEach'); return tcb.overrideProviders(BlogRoll, [provide(BlogService, { useValue: mockBlogService })]) .createAsync(BlogRoll) .then(fixture => { // this never gets printed console.log('in then:', fixture.componentInstance); }); }));
но Karma, похоже, не может справиться с асинхронностью, все в
then
просто не выполняется. Это ошибка или так задумано, разве мы не должны делать это так?Почему создание этого компонента должно происходить асинхронно? В классе TestComponentBuilder есть
createSync()
, мы не можем использовать это? Я, конечно, попробовал и обнаружил, что сигнатуры функций различаются:createAsync(rootComponentType: Type) : Promise<ComponentFixture<any>>
иcreateSync(componentFactory: ComponentFactory<C>) : ComponentFixture<C>
. Зачем нам здесь фабрика компонентов, почему она нам не нужна при создании асинхронного компонента? // Обновление: RC4 отсутствует, и теперьcreateSync()
принимает тип. Большой.
Мое здравомыслие уже благодарит вас!
compiler: TestComponentBuilder.createSync now takes a component type and throws if not all templates are either inlined are compiled before via createAsync.
- person J.P. ten Berge   schedule 01.07.2016