diff --git a/contribute/style-guides/redux.md b/contribute/style-guides/redux.md index 53ce27b193c..27b8dba8e88 100644 --- a/contribute/style-guides/redux.md +++ b/contribute/style-guides/redux.md @@ -5,7 +5,7 @@ To reduce the amount of boilerplate code used to create a strongly typed redux s `+` Much less boilerplate code `-` Non Redux standard api -## New core functionality +## Core functionality ### actionCreatorFactory @@ -117,13 +117,13 @@ Type '{ nonExistingProperty: string; data: string[]; }' is not assignable to typ Object literal may only specify known properties, and 'nonExistingProperty' does not exist in type 'ExampleReducerState'. [2322] ``` -## New test functionality +## Test functionality ### reducerTester Fluent API that simplifies the testing of reducers -#### Example +#### Usage ```typescript reducerTester() @@ -131,3 +131,32 @@ reducerTester() .whenActionIsDispatched(someAction('reducer tests')) .thenStateShouldEqual({ ...initialState, data: 'reducer tests' }); ``` + +#### Complex usage +Sometimes you encounter a `resulting state` that contains properties that are hard to compare, such as `Dates`, but you still want to compare that other props in state are correct. + +Then you can use `thenStatePredicateShouldEqual` function on `reducerTester` that will return the `resulting state` so that you can expect upon individual properties.. + +```typescript +reducerTester() + .givenReducer(someReducer, initialState) + .whenActionIsDispatched(someAction('reducer tests')) + .thenStatePredicateShouldEqual(resultingState => { + expect(resultingState.data).toEqual('reducer tests'); + return true; + }); +``` + +### thunkTester + +Fluent API that simplifies the testing of thunks. + +#### Usage + +```typescript +const dispatchedActions = await thunkTester(initialState) + .givenThunk(someThunk) + .whenThunkIsDispatched(arg1, arg2, arg3); + +expect(dispatchedActions).toEqual([someAction('reducer tests')]); +```