Как протестировать селекторы NGXS

#javascript #angular #typescript #karma-runner #ngxs

#язык JavaScript #угловой #машинописный текст #карма-бегун #ngxs

Вопрос:

Привет, я использую библиотеку управления состоянием NGXS в своем приложении, и у меня есть селектор, как показано ниже, и все работает нормально, но когда я тестирую свое приложение, у меня ошибка, как показано ниже. PrintItemsState-это ленивая загрузка. Что я заметил, проблема в том, что я передаю PrintItemsState в качестве аргумента здесь.

 @Selector([PrintItemsState])  

но я понятия не имею, как это исправить. Я буду благодарен за любые предложения.

введите описание изображения здесь

печать-элементы.селекторы.ts

 @Injectable() export class PrintItemsSelectors {  ...   @Selector([PrintItemsState])  static filter(state: PrintItemsStateModel): KeyValuelt;string, stringgt;[] {  const filters = state.fabricPage.page.Filter;  const filterKeys = Object.keys(state.fabricPage.page.Filter);  const activeFilters = [];  filterKeys.forEach((key) =gt; {  if (filters[key]) {  activeFilters.push({key: [key], value: filters[key]});  }  });  return activeFilters;  }  ... }  

печать-элементы.модуль.ts

 @NgModule({  declarations: [  PrintItemsListComponent,  FabricTableComponent,  SummaryTableComponent,  RollCodeDialogComponent,  CommentDialogComponent  ],  imports: [  PrintItemsRoutingModule,  SharedModule,  NgxsModule.forFeature([PrintItemsState])  ],  providers: [  PrintItemsHttpService  ] }) export class PrintItemsModule { }  

Комментарии:

1. Вы вызываете поддержку в своем тестовом модуле? Кроме того, если вы считаете, что введение такого состояния является проблемой, измените код, вместо этого используйте хранилище или переместите это в состояние в качестве памятки

2. @misha130 спасибо за ваш ответ. Я переместил его в состояние в виде памятки, и он работает, но теперь в этом состоянии у меня смешанные действия и селекторы. Мне придется избегать подобной ситуации и иметь отдельный файл для селекторов. Я импортирую NgxsModule.forRoot () в свои файлы *.spec,но не во все из них. Так, может быть, ИИ следует попытаться добавить NgxsModule.forRoot () во все файлы спецификаций?

3. Поэтому я попытался добавить NgxsModule.forRoot() во все файлы *.spec.ts, но безуспешно. Это то же самое, что и раньше. Что странно, у меня есть другие селекторы, определенные точно так же, как и селекторы для печати, но только селекторы для печати вызывают ошибку.

4. Попробуйте открыть проблему в их github, кажется странным, что в качестве памятки это работает, а в инъекционном-нет. Хотя, глядя в их документах на инъекционные селекторы, я не вижу, что методы должны быть статическими