<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Raghavendra NK</title>
    <description>The latest articles on DEV Community by Raghavendra NK (@raghavendrank).</description>
    <link>https://dev.to/raghavendrank</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F640704%2F0fa5ce62-8c31-4a69-865a-a555c45640e8.png</url>
      <title>DEV Community: Raghavendra NK</title>
      <link>https://dev.to/raghavendrank</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raghavendrank"/>
    <language>en</language>
    <item>
      <title>ReactApp Typescript with TDD and BDD(jest, Enzyme, Sinon, and cypress), linting and pre-commit hooks(using husky) [Part-1]</title>
      <dc:creator>Raghavendra NK</dc:creator>
      <pubDate>Mon, 31 May 2021 05:00:48 +0000</pubDate>
      <link>https://dev.to/raghavendrank/reactapp-typescript-with-tdd-and-bdd-jest-enzyme-sinon-and-cypress-linting-and-pre-commit-hooks-using-husky-part-1-3anp</link>
      <guid>https://dev.to/raghavendrank/reactapp-typescript-with-tdd-and-bdd-jest-enzyme-sinon-and-cypress-linting-and-pre-commit-hooks-using-husky-part-1-3anp</guid>
      <description>&lt;p&gt;Hi all, from this material we are going to create a sample react app from scratch, which will include the concepts from setting up a proper project with TDD and BDD approach along with linting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New to React?&lt;/strong&gt; Please check &lt;a href="https://raghavendrank.medium.com/react-is-simple-32bfb4f9233" rel="noopener noreferrer"&gt;Basics&lt;/a&gt; to get to know the basics.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ny2idz8vi5j4n0cbbzn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ny2idz8vi5j4n0cbbzn.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this &lt;strong&gt;Part-1&lt;/strong&gt; we are going to use the below libraries and tools to set up our project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;For E2E testing will use Cypress, Jest, Enzyme, Sinon, and Istanbul for code coverage&lt;/li&gt;
&lt;li&gt;We will use Typescript to follow OOPS concepts like enums, interface, types, etc.,&lt;/li&gt;
&lt;li&gt;Storybook to document components for reuse and automatically visually test components.
To maintain code quality will use ESLint, Prettier, and SassLint.&lt;/li&gt;
&lt;li&gt;And will call these e2e tests and linting rules in the pre-commit hook using husky, so before the developer wants to push his changes to the repository they can fix the coding standard errors, and make better code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So let's start with setting up the project by following below steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a react app using create-react-app with template typescript, later we will eject it to follow our standards.
&lt;strong&gt;“npx create-react-app react-typescript-jest-cypress — template typescript”&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Now run the &lt;strong&gt;“npm run eject”&lt;/strong&gt; to eject and segregate the dependencies and devDependencies like mentioned in &lt;a href="https://github.com/RaghavendraNK/react-typescript-jest-cypress/blob/main/reactapp/package.json" rel="noopener noreferrer"&gt;package.json&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;We will use Sass in our application so we can use variables, mixins, nested rules and functions to make well-organized and theming across the projects. To install sass package run &lt;strong&gt;“npm install node-sass -D”&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Now we will install and use cypress for E2E tesing with cross-browser compatibility, so we can see visually the flow, debug and fix the bugs. &lt;strong&gt;“npm install cypress -D”&lt;/strong&gt;. Update the package.json with cypress test commands.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fabam8gnv2q065aphub66.png" alt="image"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now let's run cypress, using &lt;strong&gt;“cypress-test”&lt;/strong&gt; command.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: Some of you can face issues in some versions: Using &lt;code&gt;babel-preset-react-app&lt;/code&gt; requires that you specify &lt;code&gt;NODE_ENV&lt;/code&gt; or &lt;code&gt;BABEL_ENV&lt;/code&gt; environment variables. Valid values are “development”, “test”, and “production”. Instead, received: undefined. When the app is created using create-react-app. To overcome this issue go to package.json and remove the below code snippet.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3zca5qco8ksid0j00d3z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3zca5qco8ksid0j00d3z.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And update the cypress.json file in the root folder like below:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fveztfco0rl1gaa37gm6g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fveztfco0rl1gaa37gm6g.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we will use package @cypress/code-coverage for code-coverage.&lt;br&gt;
4.1 Update babelrc like below and install the required packages&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flnlnyhexed1zyyib1i6m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flnlnyhexed1zyyib1i6m.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.2 Update the cypress/plugins/index.js file:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzcc4ahbikgdkx2h8vux.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzcc4ahbikgdkx2h8vux.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.3 Add the code-coverage summary commands in the package.json scripts section.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvj2dsqsh3dwxq4uxsuwh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvj2dsqsh3dwxq4uxsuwh.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lets install storybook by running &lt;strong&gt;“npx sb init”&lt;/strong&gt;. Once it got installed we will &lt;a href="https://storybook.js.org/docs/react/configure/theming" rel="noopener noreferrer"&gt;customize&lt;/a&gt; it like below.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;5.1 Create theme.js in the .storybook folder where you can mention the title, theme, and brandURL.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firyumc4k94galp37cmt8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firyumc4k94galp37cmt8.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.2 Call this theme in .storybook/manager.js&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2r2xnm51joa5gshsag0c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2r2xnm51joa5gshsag0c.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.3 Update package.json with storybook commands.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd79x6ostmawbkkmcfzl7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd79x6ostmawbkkmcfzl7.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We will configure our unit testing with jest, enzyme, sinon and chai tools.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;6.1 For snapshot testing we are going to use react-test-renderer, so let's install it &lt;strong&gt;“npm install react-test-renderer -D”&lt;/strong&gt;&lt;br&gt;
6.2 We will configure jest.&lt;/p&gt;

&lt;p&gt;6.2.1 Create a jest.config.json in the root folder and specify the &lt;a href="https://jestjs.io/docs/configuration" rel="noopener noreferrer"&gt;options&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F202zwilq6d90ewti8bwa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F202zwilq6d90ewti8bwa.png" alt="image"&gt;&lt;/a&gt;&lt;a href="https://github.com/RaghavendraNK/react-typescript-jest-cypress/blob/main/reactapp/jest.config.json" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.2.2 Now we will install enzyme, adapter, sinon and chai. &lt;strong&gt;“npm install enzyme @types/enzyme sinon @types/sinon chai @types/chai enzyme-adapter-react-17-updated -D”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;6.2.3 Create a file setupTests.js in root folder for specifying enzyme adapter.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foxjxhtkc6o362vq82lnb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foxjxhtkc6o362vq82lnb.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then specify the path in jest.config.json&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcrcpug49pdoppyqqirv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcrcpug49pdoppyqqirv.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;We will use istanbul for code coverage and set some threshold in jest.config.json to maintain quality of code&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frrwqfww7rga0mb5stxjf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frrwqfww7rga0mb5stxjf.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqm9gcdnrhd1ax6h85z5c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqm9gcdnrhd1ax6h85z5c.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://prettier.io/" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt;: Will use this for code formatting by creating &lt;a href="https://github.com/RaghavendraNK/react-typescript-jest-cypress/blob/main/reactapp/.prettierrc.json" rel="noopener noreferrer"&gt;.prettierrc.json&lt;/a&gt; in root folder. And install package &lt;strong&gt;“npm install prettier -D”&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0njnr9zmogsyjh8id1oj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0njnr9zmogsyjh8id1oj.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Will use &lt;a href="https://typicode.github.io/husky/#/?id=recipes" rel="noopener noreferrer"&gt;“husky”&lt;/a&gt; as our pre-commit hook and we will specify the commands which are to be executed when the developers commits the code, if all rules are getting passed will allow him to push to the repository. &lt;strong&gt;“npm install -D pretty-quick husky”&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;9.1 To add any commands run &lt;strong&gt;“npx husky add .husky/pre-commit ”&lt;/strong&gt; to update .husky file.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1585fy1p8trj8lvhw5r9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1585fy1p8trj8lvhw5r9.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So by doing this whenever the developer tries to commit the changes it will check and give the status of it by that developer can fix the issues if any.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faiwod8kds6ku7fqv8qum.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faiwod8kds6ku7fqv8qum.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Linting: will use to analyse code for potential errors&lt;br&gt;
 10.1 Scss-Lint: Create a &lt;a href="https://github.com/RaghavendraNK/react-typescript-jest-cypress/blob/main/reactapp/.sasslintrc.json" rel="noopener noreferrer"&gt;.sasslintrc.json&lt;/a&gt; in the root folder and specify the sass rules, and call it in the package.json. &lt;strong&gt;“npm install scss-lint sass-lint-auto-fix -D”&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxg8u37zf9zxlygxkcu7g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxg8u37zf9zxlygxkcu7g.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10.2 Typescript-ESlint: Install &lt;strong&gt;“npm i -D eslint typescript @typescript-eslint/parser @typescript-eslint/eslint-plugin”&lt;/strong&gt; then create a &lt;a href="https://github.com/RaghavendraNK/react-typescript-jest-cypress/blob/main/reactapp/.eslintignore" rel="noopener noreferrer"&gt;.eslintrc.js&lt;/a&gt; and &lt;a href="https://github.com/RaghavendraNK/react-typescript-jest-cypress/blob/main/reactapp/.eslintignore" rel="noopener noreferrer"&gt;.eslintignore&lt;/a&gt; in root folder. &lt;a href="https://github.com/RaghavendraNK/react-typescript-jest-cypress/blob/main/reactapp/.eslintignore" rel="noopener noreferrer"&gt;eslintignore&lt;/a&gt; will ignore the paths/files from linting.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Finally, update the .husky file with the below commands:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9kyx7pxpf77hkw4v89zg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9kyx7pxpf77hkw4v89zg.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgejq3sia5cxdpslplcab.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgejq3sia5cxdpslplcab.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So now we are ready with the proper project setup, in the next part, we will dockerize it along with CI/CD pipeline using Docker and Jenkins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part -2&lt;/strong&gt;: &lt;a href="https://raghavendrank.medium.com/mern-with-docker-container-setup-part-2-93cf34912445" rel="noopener noreferrer"&gt;Contains the Docker containers for MongoDB, NodeJS API, and ReactAPP using Docker-Compose. Along with NVM.&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Part-3&lt;/strong&gt;: &lt;a href="https://raghavendrank.medium.com/react-redux-with-i18n-and-building-the-wireframes-using-figma-part-3-e250fac4cbf4" rel="noopener noreferrer"&gt;Contains setup “i18next and redux, saga” and “axios” configurations. And also we are going to use Figma to create our wireframes, which we are going to develop.&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Part-4&lt;/strong&gt;: Contains Jenkins setup and connecting with nodeJS API with MongoDB to get the articles from the database and performing the CRUD operations.&lt;br&gt;
&lt;strong&gt;Part-5&lt;/strong&gt;: We will publish our app on the Heroku server using ci/cd pipelines.&lt;br&gt;
Please find here the complete project setup &amp;amp; Storybook with core component package: &lt;a href="https://github.com/RaghavendraNK/react-typescript-jest-cypress.git" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>redux</category>
      <category>docker</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
