Unit testing with Jest: Redux + async actions + fetch

  • Unit testing with Jest: Redux + async actions + fetchUsing Jest v20LAST UPDATE: June 24, 2017.
  • Ok, now, let’s test it step by step based on the WritingTests from the Redux docs.A big change here since I first wrote this article in 2016 is that Jest now does not mock your dependencies automatically like it used to.
  • /api’;import configureMockStore from ‘redux-mock-store’import thunk from ‘redux-thunk’const middlewares = [ thunk ];const mockStore = I am also going to write a helper method to mock the fetch response (we don’t need nock as suggested in the Redux Writing Test example):const mockResponse = (status, statusText, response) = { return new window.Response(response,…
  • Do you remember the import at the beginning of our example action code?import ‘whatwg-fetch’If you or your team forget to use the polyfill version of fetch, Chrome or FF will still work and you won’t notice it!
  • Thanks to the Redux docs for the great explanation of how we can test those async actions and for the mocha example (2017 note: They changed the example to use Jest!)

I have been using Jest since its beginnings. I won’t lie, the path has been painful: Things like updating from version 0.x.0 to version 0.y.0 (specially to version 0.4.0) was particularly terrible…
Continue reading “Unit testing with Jest: Redux + async actions + fetch”

Thoughts on Redux – Pietro Ghezzi – Medium

Important read: Thoughts on #Redux  #ReactJS #JavaScript

  • Mostly for CRUD operations.The first problem was to denormalize the entire state (the use of the library “normalizr” is encouraged by redux docs, I didn’t know it when I started and I did it manually) in a way to split it in small pieces, each with a reducer.
  • It’s useful and speeds up a lot the development process.DemoSummary of my pros and consProsTest driven development is made easy, thanks to pure functions, and increases the development productivityOnly the root component (I call it container) is connected to the reducer, all the actions and state are passed through props.
  • This makes it easy to use component composition and write stateless components.Code linearity, everything is simple and doesn’t differ much from one project to another.Immutability: forcing to keep an immutable state helps a lot avoiding weird bugs.The Log middleware in dev mode, showing all the different states before and after an action is dispatched, is of a great help.ConsIt’s difficult to handle relationships and there isn’t any official library with documentation and support to help you with it.Redundant code, every action is written manually, even the most common, like changing an attribute of the state.Normalizing a complex state with many level of nested objects doesn’t always seem the best approach.My best practicesDirectory structure by module instead of scope.
  • A better approach it could be to retrieve the new state from the server when necessary and handle the state relationships on the database layer.TDD on reducers, tests on reducers not only speed up the development but also cover you on possible “silent” bugs on the state.Keep components simple and use component composition.Normalize the state with the use of Reselect libraryHandling complex store relationships (#386)Note from Dan AbramovDeleting is always tricky because there is no first class notion of a schema.
  • These reducers will know when to remove IDs from foreign key fields because they know what the schema looks like.Dependencies I will consider in for managing complex form stateRedux-ormA small, simple and immutable ORM to manage relational data in your Redux store.It would be great if CRUD operations were managed with the model declaration with no need to write actions manually.Redux UIGood solution to separate the UI state from the application state.NormalizrLibrary suggested in the official redux documentation for normalizing the application state.Main dependencies for this projectReactReduxReact router v2Redux ThunkReact DnDReselectStyled componentsReact BootstrapBootstrap Material DesignJestConclusionRedux is a good solution for handling complex interface, it is very similar to flux architecture, but if I have to rewrite the application, I would do it in a different way.I would avoid to specify all the logic on the client, moving a part on the server side.A good approach I have seen in some projects, it is to dispatch the actions to the server and with a websockets connection, notify all the connected clients of the changes made.This way the client is responsible only to denormalize and normalize the state received by the server, handle the UI state and presenting the data.On the server side is much easier to handle relationships with an ORM provided by a web framework.This project has been of a great help to make me understand all the caveats redux can reserve for a medium size application.

I have been working on my first project with Redux for the last few weeks. An admin interface to manage and create questionnaires about patients data collection. When writing a small application…
Continue reading “Thoughts on Redux – Pietro Ghezzi – Medium”

Blueprint to becoming a React Native Developer

Blueprint to becoming a React Native Developer #Nodejs
☞

  • A transformative moment for me was when I learned Redux – even if I wasn’t using it I was able to reason about how to better build apps.
  • I want to prescribe a plan that will allow you to actually build apps with React Native.
  • ☞ Build Web Apps with React JS and Flux
  • You can get started with Meteor by following the tutorial .
  • A lot of the high level stuff you’ll already know from learning React.

Read the full article, click here.


@nodejs_dev: “Blueprint to becoming a React Native Developer #Nodejs
☞”


I’m a big believer in React Native — if you’re reading this you’re likely interested in it as well. The Javascript ecosystem is quickly evolving


Blueprint to becoming a React Native Developer

State Streams and React — Medium

  • Each connected component is forced to shallow compare in the shouldComponentUpdate lifecycle method because it doesn’t know if it just received a state update which is relevant or not.
  • The above gives us two action streams that we can use to reduce state with.
  • A state stream is effectively the result of reducing a stream of actions.
  • As mentioned before, the two core building blocks of a module’s state stream is its action stream and its reducer (of said action stream).
  • Accessing State in Action Streams

Read the full article, click here.


@MarkusCtz: “Why RxJS is the Better Tool for Unidirectional Data Flow: @christianalfoni @BenLesh @dan_abramov #reactjs #redux #rx”


Why RxJS is the Better Tool for Unidirectional Data Flow


State Streams and React — Medium

Blueprint to becoming a React Native Developer — Android & Tech Publication — Medium

Blueprint to becoming a #ReactJS Native developer:

  • I want to prescribe a plan that will allow you to actually build apps with React Native.
  • You can get started with Meteor by following the tutorial .
  • If courses are more your style I would have to suggest checking out the ” Build Apps with React Native ” on Udemy.
  • A transformative moment for me was when I learned Redux – even if I wasn’t using it I was able to reason about how to better build apps.
  • What you’re really learning is how to work with the native platforms.

Read the full article, click here.


@ReactiveConf: “Blueprint to becoming a #ReactJS Native developer:”


I’m a big believer in React Native — if you’re reading this you’re likely interested in it as well. The Javascript ecosystem is quickly…


Blueprint to becoming a React Native Developer — Android & Tech Publication — Medium