Тестирование в Angular 5 с Karma и ngrx/store

В настоящее время я работаю над своим первым «rl-проектом» для компании (для дипломной работы), начал тестировать наше приложение Angular 5 и столкнулся с некоторыми вопросами. Все автоматически сгенерированные тесты, которые Angular пишет для вас, провалились, и после работы над ними я пришел к тому, что подумал, что мне нужно импортировать все зависимости из app.module.ts в admin.component.spec.ts, чтобы он работал. . Это вроде сработало (сработало и с другими классами), но это кажется неправильным. Я нахожусь в точке, где я не верю, что вы должны писать такие тесты, и я не могу найти никакой информации в Интернете об этом. Это мой первый вопрос, а теперь второй: мой описанный метод не работал с ngrx/store. В моем app.module.ts я сделал

import { StoreModule } from '@ngrx/store';

и

@NgModule({
  imports: [
    StoreModule.forRoot({}), 
    ...
  ]
  ...
})

Но что бы я ни делал в app.component.spec.ts, тесты всегда будут выдавать

Failed: StaticInjectorError(DynamicTestModule)[LayoutStateStore -> Store]: 
  StaticInjectorError(Platform: core)[LayoutStateStore -> Store]: 
    NullInjectorError: No provider for Store!

Я надеюсь, что вы понимаете мои проблемы и можете мне помочь.


person DaveLillo    schedule 20.11.2018    source источник


Ответы (1)


Чтобы затронуть ваш первый вопрос

Я думал, что мне нужно импортировать все зависимости из app.module.ts в admin.component.spec.ts, чтобы он работал.

Не совсем. Обычно это происходит, когда у вас есть несколько дочерних компонентов/модулей, и если вы просто заботитесь о них как о черном ящике, вы можете использовать: schemas: [CUSTOM_ELEMENTS_SCHEMA] и/или NO_ERRORS_SCHEMA, чтобы просто протестировать свой собственный компонент. Дополнительную информацию о том, когда вы можете использовать это, можно найти здесь

Относительно вашего вопроса о магазине. Похоже, вы используете магазин функций и предоставляете пустой магазин только для TestBed.

Вам нужно будет смоделировать ваш магазин функций, что-то вроде этого:

imports: [StoreModule.forRoot({
          ...reducer, \\ your reducers
          LayoutStateStore: combineReducers(reducer) \\ the actual feature store you are using
        })]
person dream88    schedule 20.11.2018