<?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: AndreasRisager</title>
    <description>The latest articles on DEV Community by AndreasRisager (@andreasrisager).</description>
    <link>https://dev.to/andreasrisager</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%2F580815%2F74682ee3-db9d-4548-851b-5e4236d1f1ed.jpeg</url>
      <title>DEV Community: AndreasRisager</title>
      <link>https://dev.to/andreasrisager</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andreasrisager"/>
    <language>en</language>
    <item>
      <title>Use prettier &amp; pre-commit hooks for testing.</title>
      <dc:creator>AndreasRisager</dc:creator>
      <pubDate>Sat, 10 Dec 2022 01:36:08 +0000</pubDate>
      <link>https://dev.to/andreasrisager/use-prettier-pre-commit-hooks-for-testing-25nl</link>
      <guid>https://dev.to/andreasrisager/use-prettier-pre-commit-hooks-for-testing-25nl</guid>
      <description>&lt;h2&gt;
  
  
  So what exactly are ESLint and Prettier?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ESLint&lt;/strong&gt; performs automated scans of your JavaScript files for common syntax and style errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prettier&lt;/strong&gt; scans your files and reformats your code to ensure consistent rules are being followed for indentation, spacing, semicolons, single quotes vs double quotes, etc.&lt;/p&gt;

&lt;p&gt;Why you and your team should use prettier:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Save time in code reviews&lt;/strong&gt;, because you can safely ignore all style issues.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;They keep everybody on the same page&lt;/strong&gt;, following the same rules.´&lt;/li&gt;
&lt;li&gt;Keeping a &lt;strong&gt;consistent&lt;/strong&gt; code style&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  This is how you can install prettier to your react project
&lt;/h3&gt;

&lt;p&gt;(&lt;code&gt;npx create-react-app .&lt;/code&gt;) to start a react project.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
1) Type &lt;code&gt;npm i -D prettier eslint-config-prettier&lt;/code&gt; in your console.&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%2Fq00uwlz0al0eulvet48x.JPG" 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%2Fq00uwlz0al0eulvet48x.JPG" alt="install prettier with your console"&gt;&lt;/a&gt;&lt;/p&gt;
vscode console



&lt;p&gt;&lt;br&gt;&lt;br&gt;
2) Now create two files at the root of your project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;.prettierignore&lt;/li&gt;
&lt;li&gt;.prettierrc.json
&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%2Fmjoxkivu6z4yqvasdv3o.JPG" alt="project files"&gt;project files

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
3) Open &lt;em&gt;.prettierignore&lt;/em&gt; and put in these files to ignore. ↙&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;  &lt;span class="nx"&gt;node_modules&lt;/span&gt;
  &lt;span class="nx"&gt;build&lt;/span&gt;
  &lt;span class="nx"&gt;coverage&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vscode&lt;/span&gt;
  &lt;span class="c1"&gt;// etc.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;br&gt;&lt;br&gt;
4) Open &lt;em&gt;.prettierrc.json&lt;/em&gt; and write your styling rules. &lt;br&gt;
You can find prettier options &lt;a href="https://prettier.io/docs/en/options.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"printWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"useTabs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"semi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"singleQuote"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"quoteProps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"consistent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"bracketSpacing"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"jsxBracketSameLine"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"arrowParens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"avoid"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;br&gt;&lt;br&gt;
5) Open &lt;em&gt;package.json&lt;/em&gt; and make a new script to use prettier.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prettier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"prettier --write ."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and run it with &lt;code&gt;npm run prettier&lt;/code&gt; in your console.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  How to use pre-commit hooks
&lt;/h3&gt;

&lt;p&gt;pre-commit is a tool that allows us to use commands before committing.&lt;br&gt;
In this case, we want to run prettier before we commit.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx mrm lint-staged&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This installs a hook for prettier.&lt;/p&gt;

&lt;p&gt;Now we need to make sure all our tests PASS before we commit.&lt;br&gt;
So let's install a hook for tests:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx husky install&lt;/code&gt; &amp;lt;- This creates a husky folder.&lt;/p&gt;

&lt;p&gt;Then create a pre-commit file.&lt;br&gt;
&lt;code&gt;npx husky add .husky/pre-commit "npm run prettier npm test"&lt;/code&gt;&lt;br&gt;
if this doesn't work and it gives you this message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npx husky add .husky/pre-commit "npm test"
Usage

  husky install [dir] (default: .husky)
  husky uninstall
  husky add &amp;lt;file&amp;gt; [cmd]

Examples

  husky install
  husky install .config/husky

  husky add .husky/pre-commit
  husky add .husky/pre-commit "npm test"
  husky add .config/husky/pre-commit "npm test"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you need to run this command and manually add the hook:&lt;br&gt;
&lt;code&gt;npx husky add .husky/pre-commit&lt;/code&gt;&lt;br&gt;
Open the file &lt;em&gt;.husky/pre-commit&lt;/em&gt; and type &lt;code&gt;npm test&lt;/code&gt; and &lt;code&gt;npm run prettier&lt;/code&gt; like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npm run prettier
npm test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now we need to install the cross-env package.&lt;br&gt;
&lt;code&gt;npm i -D cross-env&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In package.json under &lt;em&gt;scripts&lt;/em&gt; we want to change:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"test": "react-scripts test"&lt;/code&gt;&lt;br&gt;
to&lt;br&gt;
&lt;code&gt;"test": "cross-env CI=true react-scripts test"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This makes sure, you can't commit your code with failed tests.&lt;br&gt;
It prettifies your code, checks if your tests pass, and then commits.&lt;/p&gt;

</description>
      <category>prettier</category>
      <category>react</category>
      <category>testing</category>
      <category>eslint</category>
    </item>
  </channel>
</rss>
