import { Store, Reducer, generatePayloadTypeChecker } from '../../src'; import { Subject } from 'rxjs'; interface CalculatorState { currentNumber: number; } interface CalculatorActions { add: number; subtract: number; reset: null; } class Logger { logged: Subject = new Subject(); log(x: string) { this.logged.next(x) } } describe('store', () => { let initialState: CalculatorState let reducer: Reducer; let store: Store; let logger: Logger; beforeEach(() => { initialState = { currentNumber: 0 }; const is = generatePayloadTypeChecker(); reducer = function (state, action, payload) { if (is('add', action, payload)) { return { ...state, currentNumber: state.currentNumber + payload }; } return state; }; store = new Store(initialState, reducer); logger = new Logger(); }); it('should not throw', () => { expect(store).toBeTruthy(); }); describe('reducer', () => { it('should work', () => { store.dispatch('add', 3); store.dispatch('add', 2); expect(store.value.currentNumber).toBe(5); }); }); });