<?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: Matt Britt</title>
    <description>The latest articles on DEV Community by Matt Britt (@matthewbritt).</description>
    <link>https://dev.to/matthewbritt</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%2F335400%2F9154a045-e06b-4770-8225-6076d337440a.jpeg</url>
      <title>DEV Community: Matt Britt</title>
      <link>https://dev.to/matthewbritt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/matthewbritt"/>
    <language>en</language>
    <item>
      <title>How to create a video recording of your new web app</title>
      <dc:creator>Matt Britt</dc:creator>
      <pubDate>Thu, 07 May 2020 14:53:10 +0000</pubDate>
      <link>https://dev.to/matthewbritt/how-to-create-a-video-recording-of-your-new-web-app-2id4</link>
      <guid>https://dev.to/matthewbritt/how-to-create-a-video-recording-of-your-new-web-app-2id4</guid>
      <description>&lt;p&gt;Do you need to create a video recording of your new web app and upload it to YouTube for a Zoom presentation? Hey, me too. Let's walk through this together. We are going to be using QuickTime Player to take a screen recording of our app and then overlay voice narration on iMovie. And here we go...&lt;/p&gt;

&lt;p&gt;Before anything else, take a couple practice walk-throughs of your app. Time it out. Be sure you can hit all the features that you want to highlight in a 2-3 minute clip. When you are comfortable with your timing, open the QuickTime Player and select 'New Screen Recording'. Be sure that 'Record Entire Screen' is selected and then click 'Record'. When you are done making magic happen with your app, click the 'Stop' icon at the top menu bar. The clip will appear in your lower right-hand corner. Open it up and trim any unnecessary footage from the beginning or end. &lt;/p&gt;

&lt;p&gt;Now launch iMovie and import your clip. (At this point, I received the message 'not enough space in selected destination'. I had to move the iMovie app into the trash and redownload it from the app store.) Once imported, click the 'Record Voiceover' microphone icon and lay down your silky track.&lt;/p&gt;

&lt;p&gt;All that's left is to hit 'Share' and send it off to YouTube (now would be a good time to create a YouTube account if you haven't already). Once uploading is complete it should be in 'your videos' and you can share with the world. Well done.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Simple Keyboard Shortcuts: VS Code Edition</title>
      <dc:creator>Matt Britt</dc:creator>
      <pubDate>Wed, 06 May 2020 16:00:19 +0000</pubDate>
      <link>https://dev.to/matthewbritt/simple-keyboard-shortcuts-vs-code-edition-3ka8</link>
      <guid>https://dev.to/matthewbritt/simple-keyboard-shortcuts-vs-code-edition-3ka8</guid>
      <description>&lt;p&gt;So you've mastered the keyboard shortcuts on your Mac and are churning out code like a cyborg now, eh? Good for you. Let's up your game even more. Here are some VS Code specific shortcuts for Mac that I have found useful:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Go_kAyH---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/r2z9lq9luwq6a4s0szsr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Go_kAyH---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/r2z9lq9luwq6a4s0szsr.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Control-Backtick (`): Open your terminal/jump to command line.&lt;/li&gt;
&lt;li&gt;Command-W: Close current tab.&lt;/li&gt;
&lt;li&gt;Command-P: Quick open/search files by name.&lt;/li&gt;
&lt;li&gt;Command-O: Open file.&lt;/li&gt;
&lt;li&gt;Command-N: New window.&lt;/li&gt;
&lt;li&gt;Control-Tab (or Control-Shift-Tab): Toggle between files.&lt;/li&gt;
&lt;li&gt;Control-R: Search/open recent files.&lt;/li&gt;
&lt;li&gt;Command-Up/Down: Go to beginning/end of file.&lt;/li&gt;
&lt;li&gt;Fn-Left/Right: Go to beginning/end of line.&lt;/li&gt;
&lt;li&gt;Command-L: Select current line.&lt;/li&gt;
&lt;li&gt;Option-Up/Down: Move entire line up/down.&lt;/li&gt;
&lt;li&gt;Option-Z: Toggle word wrap.&lt;/li&gt;
&lt;li&gt;Option-Shift-F: Auto-format code.&lt;/li&gt;
&lt;li&gt;Command-Control-F: Toggle full screen.&lt;/li&gt;
&lt;li&gt;Option-click: Create multiple cursors.&lt;/li&gt;
&lt;li&gt;Command-K then Command-T: Select color themes.&lt;/li&gt;
&lt;li&gt;Command-K then Command-S: Open keyboard shortcut list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also, be sure to search the different color schemes and install one that you like. You're going to be spending a lot of time in VS Code, so get comfortable and enjoy yourself!&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Simple Mac Keyboard Shortcuts</title>
      <dc:creator>Matt Britt</dc:creator>
      <pubDate>Thu, 02 Apr 2020 02:19:37 +0000</pubDate>
      <link>https://dev.to/matthewbritt/simple-mac-keyboard-shortcuts-4i75</link>
      <guid>https://dev.to/matthewbritt/simple-mac-keyboard-shortcuts-4i75</guid>
      <description>&lt;p&gt;As you have probably heard at some point in your coding journey (thanks Marc), the faster you can make mistakes, the faster you can learn from those mistakes. To that end, I have been trying to use my mouse as little as possible lately and instead have been relying on keyboard shortcuts. It was a struggle at first to break from old habits, but the new muscle memory is finally starting to take hold. Here are some of the shortcuts that I have found most useful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/heIX5HfWgEYlW/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/heIX5HfWgEYlW/giphy.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Command-Tab (or Command-Shift-Tab): Toggle between apps.&lt;/li&gt;
&lt;li&gt;Control-Tab (or Control-Shift-Tab): Toggle between tabs in your browser.&lt;/li&gt;
&lt;li&gt;Option-Command-J: Open/close the DevTools (in Chrome).&lt;/li&gt;
&lt;li&gt;Control-Backtick (`): Jump into your console (while in DevTools or Visual Studion Code).&lt;/li&gt;
&lt;li&gt;Command–Left Bracket ([): Go to the previous page/folder.&lt;/li&gt;
&lt;li&gt;Command–Right Bracket (]): Go to the next page/folder.&lt;/li&gt;
&lt;li&gt;Control-Command-F: Full screen mode (or undo if already full screen).&lt;/li&gt;
&lt;li&gt;Command-X: Cut the selected item and copy it to the Clipboard.&lt;/li&gt;
&lt;li&gt;Command-C: Copy the selected item to the Clipboard. &lt;/li&gt;
&lt;li&gt;Command-V: Paste the contents of the Clipboard into the current document or app. &lt;/li&gt;
&lt;li&gt;Command-Z: Undo the previous command. You can then press Shift-Command-Z to Redo, reversing the undo command. &lt;/li&gt;
&lt;li&gt;Command-A: Select all.&lt;/li&gt;
&lt;li&gt;Command-R: Refresh the page.&lt;/li&gt;
&lt;li&gt;Command-F: Open a Find window.&lt;/li&gt;
&lt;li&gt;Control-T: Open a new tab.&lt;/li&gt;
&lt;li&gt;Command-W: Close the front window or tab. &lt;/li&gt;
&lt;li&gt;Command-H: Hide the front app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And, of course...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Control-Command-Q: Lock your screen. (Seriously, always lock the screen when you step away from your computer.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These shortcuts make a good set to begin your practice. Learn them, love them, and in no time you'll forget that you paid a lot of money for a good mouse that you never use.&lt;/p&gt;

&lt;p&gt;For a much more exhaustive list, visit &lt;a href="https://support.apple.com/en-us/HT201236"&gt;https://support.apple.com/en-us/HT201236&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>productivity</category>
      <category>codenewbie</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building a Simple HTML Table </title>
      <dc:creator>Matt Britt</dc:creator>
      <pubDate>Sun, 08 Mar 2020 04:02:27 +0000</pubDate>
      <link>https://dev.to/matthewbritt/building-a-simple-html-table-3mg1</link>
      <guid>https://dev.to/matthewbritt/building-a-simple-html-table-3mg1</guid>
      <description>&lt;p&gt;Sometimes you want to present information to your users in a simple column/row structure. HTML tables are an easy way to do this. Let's get started building a simple version for a Rails app.&lt;/p&gt;

&lt;p&gt;We begin with opening and closing table tags &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; to define our feature and then add table row tags &lt;code&gt;&amp;lt;tr&amp;gt;&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;   
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/tr&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Next, we add table header tags &lt;code&gt;&amp;lt;th&amp;gt;&lt;/code&gt; and input the names that we want for our table columns (table headings will be bold and centered in our columns by default).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="no"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/th&amp;gt;  
    &amp;lt;th&amp;gt;Color&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="no"&gt;Age&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/th&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/table&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Great start! We already have our table header designed. Now, let's add a few more table rows &lt;code&gt;&amp;lt;tr&amp;gt;&lt;/code&gt;. We'll fill these rows with table data tags &lt;code&gt;&amp;lt;td&amp;gt;&lt;/code&gt; and our corresponding data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="no"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/th&amp;gt;  
    &amp;lt;th&amp;gt;Color&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="no"&gt;Age&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/th&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="no"&gt;Daz&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/td&amp;gt;
    &amp;lt;td&amp;gt;Orange&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/td&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="no"&gt;Stimpy&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/td&amp;gt;
    &amp;lt;td&amp;gt;Red &amp;amp; White&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/td&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="no"&gt;Cheshire&lt;/span&gt; &lt;span class="no"&gt;Cat&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/td&amp;gt;
    &amp;lt;td&amp;gt;Purple&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;71&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/td&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/table&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And just like that, we have a simple table in our app that should look something like this:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TzcHhzsw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/aikezqrbdaat2p5z59ew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TzcHhzsw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/aikezqrbdaat2p5z59ew.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Great, right? But not very aesthetically pleasing. Luckily, we can spice this table up with just a few simple extras. Let's throw on a table name using &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; tags and then specify a little styling within our opening &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; tag.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="no"&gt;Famous&lt;/span&gt; &lt;span class="no"&gt;Cats&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h2&amp;gt;
&amp;lt;table style="width:50%" border="1" cellpadding="5"&amp;gt;
&amp;lt;tr&amp;gt; 
    &amp;lt;th&amp;gt;Name&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;  
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="no"&gt;Color&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/th&amp;gt;
    &amp;lt;th&amp;gt;Age&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/tr&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And for just a bit more oomph, we can add shading to our table rows by specifying this in our &lt;strong&gt;application.css&lt;/strong&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="ss"&gt;:nth&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;even&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;color: &lt;/span&gt;&lt;span class="c1"&gt;#ced3d0;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now we have a table feature that's dressed to impress.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--r7uAoTDd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6lclrgbm7ivet9q2fdjy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r7uAoTDd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6lclrgbm7ivet9q2fdjy.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Feel free to experiment with more styling until it's exactly how you want. Boom done.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>html</category>
      <category>cats</category>
    </item>
    <item>
      <title>Writing a Simple RSpec Test</title>
      <dc:creator>Matt Britt</dc:creator>
      <pubDate>Fri, 14 Feb 2020 20:37:55 +0000</pubDate>
      <link>https://dev.to/matthewbritt/writing-a-simple-rspec-test-32ko</link>
      <guid>https://dev.to/matthewbritt/writing-a-simple-rspec-test-32ko</guid>
      <description>&lt;p&gt;RSpec is a popular testing framework for Ruby. Here we will write some simple tests for ourselves to help learn the basics.&lt;/p&gt;

&lt;p&gt;The first step is to install our gem using&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ gem install rspec&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Then, inside of our project directory, we call&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;$ rspec --init&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;This initializes two files: the &lt;strong&gt;spec_helper&lt;/strong&gt; and the &lt;strong&gt;.rspec file&lt;/strong&gt;. We will also need to create a spec file in which to build our tests. Today this will be named &lt;strong&gt;spec/cat_spec.rb&lt;/strong&gt;. We are building instances of the class Cat inside of a file we have named &lt;strong&gt;lib/cat.rb&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Inside of &lt;strong&gt;spec/cat_spec.rb&lt;/strong&gt;, we need to&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;require "spec_helper"&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
 which will load the configuration for the specification. We will also&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;require "cat"&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
 as this is the class for which we will be writing examples. We can define this class inside of our &lt;strong&gt;lib/cat.rb&lt;/strong&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Cat&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;We are then ready to describe how we want our cats to behave. We start by writing a "describe" block in &lt;strong&gt;spec/cat_spec.rb&lt;/strong&gt;. Inside of this block we will write our examples to test.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;"spec_helper"&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;"cat"&lt;/span&gt;


&lt;span class="n"&gt;describe&lt;/span&gt; &lt;span class="no"&gt;Cat&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="c1"&gt;#examples to test    &lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Here our description will test for the &lt;strong&gt;name&lt;/strong&gt; of our cat instance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;describe&lt;/span&gt; &lt;span class="no"&gt;Cat&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;it&lt;/span&gt; &lt;span class="s2"&gt;"is named Daz"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Cat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
        &lt;span class="n"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="n"&gt;eq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Daz"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;We can run our test by calling &lt;code&gt;$ rspec&lt;/code&gt;.&lt;br&gt;
Doing so now gives us a failing test.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;
  &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="no"&gt;Cat&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;named&lt;/span&gt; &lt;span class="no"&gt;Daz&lt;/span&gt;
     &lt;span class="no"&gt;Failure&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="no"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="n"&gt;eq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Daz"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

     &lt;span class="no"&gt;NoMethodError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
       &lt;span class="n"&gt;undefined&lt;/span&gt; &lt;span class="nb"&gt;method&lt;/span&gt; &lt;span class="sb"&gt;`name' for #&amp;lt;Cat:0x00007f948d0e7030&amp;gt;
     # ./spec/cat_spec.rb:8:in `&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;levels&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;top&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;required&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;

&lt;span class="no"&gt;Finished&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;0.0041&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="n"&gt;took&lt;/span&gt; &lt;span class="mf"&gt;0.12837&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;load&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;failure&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;We can then write code in our &lt;strong&gt;lib/cat.rb&lt;/strong&gt; file to correct the&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;undefined method `name'&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
 and get our test to pass.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Cat&lt;/span&gt;
    &lt;span class="nb"&gt;attr_accessor&lt;/span&gt; &lt;span class="ss"&gt;:name&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;
        &lt;span class="vi"&gt;@name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Daz"&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Running &lt;code&gt;$ rspec&lt;/code&gt; again should give us a green light on our test.&lt;/p&gt;

&lt;p&gt;Now that we have one test passing, let's write another description to test in &lt;strong&gt;spec/cat_spec.rb&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;describe&lt;/span&gt; &lt;span class="no"&gt;Cat&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;it&lt;/span&gt; &lt;span class="s2"&gt;"is named Daz"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Cat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
        &lt;span class="n"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="n"&gt;eq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Daz"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="n"&gt;it&lt;/span&gt; &lt;span class="s2"&gt;"is the color orange"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Cat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
        &lt;span class="n"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;color&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="n"&gt;eq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"orange"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Running &lt;code&gt;$ rspec&lt;/code&gt; now should show that we have 2 examples and are failing 1 of them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="no"&gt;Cat&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="n"&gt;orange&lt;/span&gt;
     &lt;span class="no"&gt;Failure&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="no"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;color&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="n"&gt;eq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"orange"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

     &lt;span class="no"&gt;NoMethodError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
       &lt;span class="n"&gt;undefined&lt;/span&gt; &lt;span class="nb"&gt;method&lt;/span&gt; &lt;span class="sb"&gt;`color' for #&amp;lt;Cat:0x00007ff2fa9a3248 @name="Daz"&amp;gt;
     # ./spec/cat_spec.rb:12:in `&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;levels&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;top&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;required&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;

&lt;span class="no"&gt;Finished&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;0.00502&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="n"&gt;took&lt;/span&gt; &lt;span class="mf"&gt;0.1164&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;load&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;examples&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;failure&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If we take direction from the test and add code that defines our cat &lt;strong&gt;color&lt;/strong&gt; as &lt;strong&gt;orange&lt;/strong&gt;, we should be able to get a second passing test.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Cat&lt;/span&gt;
    &lt;span class="nb"&gt;attr_accessor&lt;/span&gt; &lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:color&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;
        &lt;span class="vi"&gt;@name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Daz"&lt;/span&gt;
        &lt;span class="vi"&gt;@color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"orange"&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;





&lt;div class="highlight"&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Finished&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;0.00474&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="n"&gt;took&lt;/span&gt; &lt;span class="mf"&gt;0.12366&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;load&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;examples&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;failures&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And that's it. We can continue to practice with as many tests as we would like.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>ruby</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
