mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Refactor: Adds Redux Toolkit package * Refactor: Uses configureStore from Redux Toolkit * Refactor: Migrates applicationReducer * Refactor: Migrates appNotificationsReducer * Refactor: Migrates locationReducer * Refactor: Migrates navModelReducer * Refactor: Migrates teamsReducer and teamReducer * Refactor: Migrates cleanUpAction * Refactor: Migrates alertRulesReducer * Refactor: Cleans up recursiveCleanState * Refactor: Switched to Angular compatible reducers * Refactor: Migrates folderReducer * Refactor: Migrates dashboardReducer * Migrates panelEditorReducer * Refactor: Migrates dataSourcesReducer * Refactor: Migrates usersReducer * Refactor: Migrates organizationReducer * Refactor: Migrates pluginsReducer * Refactor: Migrates ldapReducer and ldapUserReducer * Refactor: Migrates apiKeysReducer * Refactor: Migrates exploreReducer and itemReducer * Refactor: Removes actionCreatorFactory and reducerFactory * Refactor: Moves mocks to test section * Docs: Removes sections about home grown framework * Update contribute/style-guides/redux.md Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com> * Refactor: Cleans up some code * Refactor: Adds state typings * Refactor: Cleans up typings * Refactor: Adds comment about ImmerJs autoFreeze Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
49 lines
1.4 KiB
Markdown
49 lines
1.4 KiB
Markdown
# Redux framework
|
|
|
|
Grafana uses [Redux Toolkit](https://redux-toolkit.js.org/) to handle Redux boilerplate code.
|
|
> Some of our Reducers are used by Angular and therefore state is to be considered as mutable for those reducers.
|
|
|
|
## Test functionality
|
|
|
|
### reducerTester
|
|
|
|
Fluent API that simplifies the testing of reducers
|
|
|
|
#### Usage
|
|
|
|
```typescript
|
|
reducerTester()
|
|
.givenReducer(someReducer, initialState)
|
|
.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')]);
|
|
```
|