В своем приложении angular я использую NGXS и Jasmine.
В некоторых из моих магазинов я использую ngxsAfter Bootstrap в качестве инициализации, при которой я отправляю некоторые действия.
Я не могу используйте ngxsOnInit, потому что не знаю точно, почему, но я не могу получить свои актуальные параметры URL-адреса из моих селекторов RouteState (всегда undefined в ngxsOnInit, даже когда я подписываюсь на эти селекторы и жду некоторое время)
Но с ngxsAfter Bootstrap я получаю эти значения.
Итак, в своих модульных тестах я хочу проверить эту инициализацию, но я не нашел никакого решения для запуска ngxsAfter Bootstrap method.
Согласно документации NGXS (https://www.ngxs.io/advanced/life-cycle), ngxsAfter Bootstrap будет запускаться через APP_BOOTSTRAP_LISTENER, поэтому я думаю, что это когда мы используем свойство 'bootstrap' из ngModule, которого нет в TestBed.configureTestingModule ...
Я попытался получить экземпляр своего хранилища, вызвать вручную его метод ngxsAfter Bootstrap с имитацией StateContext в качестве аргумента, но очевидно, что он стал ause StateContext высмеян, он не запускает мои действия, когда я использую его отправку ...
Знаете ли вы какое-нибудь "чистое" решение по этому поводу? (чистый, здесь, просто чтобы не изменять мою реализацию, чтобы заставить модульный тест работать)
Thx! (извините за мой плохой английский sh)
РЕДАКТИРОВАТЬ:
Что я наконец сделал:
productStore = TestBed.inject(ProductState);
...
const stateContextMocked = {
getState: jasmine.createSpy(),
setState: jasmine.createSpy(),
patchState: jasmine.createSpy(),
dispatch: jasmine.createSpy(),
} as StateContext<IProduct>;
...
productStore.ngxsAfterBootstrap(stateContextMocked);
...
expect(stateContextMocked.dispatch).toHaveBeenCalledWith(new GetProductAction(productIdMocked));
Я пытался сделать это раньше, но не сделал нравится, потому что я не мог использовать «настоящий» объект StateContext, который автоматически передается в аргументе ngxsAfter Bootstrap.
Итак, я не смог получить результат моей отправки.
Но на самом деле я могу просто проверить, был ли вызван мой метод отправки, и провести еще один тест, который проверяет само отправленное действие.
Это даже лучший подход ^^