NGXS: тестирование асинхронных действий: подписка Automati c не работает - PullRequest
1 голос
/ 13 февраля 2020

с официального сайта NGXS

enter image description here

  1. Я пишу модульные тесты для магазина NGXS (Жасмин + Карма, angular 2)
  2. В хранилище NGXS в Asynchronous Actions (это как Effect в NGRX) мы не подписываемся внутри - мы просто возвращаем наблюдаемое. И это нормально, потому что автоматическая подписка работает.
  3. НО, когда я запускаю свои тесты, автоматическая c подписка на асинхронные действия (ЭФФЕКТЫ) - просто не работает. Как результат - тест не пройден.
  4. Подводя итог - я не могу проверить асинхронные действия NGXS
  5. Что я уже пробовал: 1) Я написал как на официальном сайте NGXS (на картинке) 2) Я попробовал это (done ()) конструкция, 3) Я пробовал действия $ .subscribe () конструкция.
  6. Это работает, когда я делаю вручную - .subscribe () в действии - но это проблема, потому что он должен работать без this
  7. Это ссылка на официальную страницу: https://www.ngxs.io/recipes/unit-testing (topi c: тестирование асинхронных действий) Пожалуйста, помогите:)

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

ОТВЕТ

`
// it doesn't work for me:
myStubFunction: () => {
    return of(stubResult);
};
// the solution was
myStubFunction: () => {
    return timer(0).pipe(mergMap(()=>of(stubResult)));
};
`
1 голос
/ 14 февраля 2020

Пример с официальной страницы работает корректно. Если вы заглушаете какую-то функцию из действия, которое возвращает Observable, попробуйте встроить задержку в вашу функцию заглушки. Например,

stubFunc: () => { return timer(0).pipe( ... ); }

...