考慮以下代碼:
loadProducts$ = createEffect(() =>
this.actions$.pipe(
ofType(requestLoadProducts),
switchMap(action =>
this.service.load().pipe(
map(data => loadProducts({products: data}))
))
)
, { dispatch: false });
如您所見,添加{ dispatch: false }是開發人員犯的一個錯誤(因為效果應該回傳并調度一個動作),該錯誤只能通過手動測驗應用程式來捕獲,因為試圖覆寫此效果的單元測驗通過了。
describe('loadProuct$', () => {
it('should return loadProducts', (done) => {
actions$ = of(requestLoadProducts);
effects.loadProducts$.subscribe((result) => {
expect(result).toEqual(
loadProducts({
products: [{ id: 1, name: 'asd', price: '2', image: 2 }],
})
);
done();
});
});
});
我知道這{ dispatch: false }不會改變流程,它只是阻止在后臺實際調度回傳的操作。不幸的是,這意味著在單元測驗中無法捕獲此類錯誤。
您知道在單元測驗中正確覆寫此問題的任何解決方案嗎?
uj5u.com熱心網友回復:
您可以使用getEffectsMetadata來驗證 dispatch 是否設定為false。此方法回傳效果的配置。
import { getEffectsMetadata } from @ngrx/effects;
expect(getEffectsMetadata(effectClass).effectProperty$.dispatch).toBe(false);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/359941.html
