#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, кажется странным, что в качестве памятки это работает, а в инъекционном-нет. Хотя, глядя в их документах на инъекционные селекторы, я не вижу, что методы должны быть статическими