<?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: Thato Semoko</title>
    <description>The latest articles on DEV Community by Thato Semoko (@thatosmk).</description>
    <link>https://dev.to/thatosmk</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%2F373935%2F7fae44be-386a-4226-bf20-373a3373a1b4.jpeg</url>
      <title>DEV Community: Thato Semoko</title>
      <link>https://dev.to/thatosmk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thatosmk"/>
    <language>en</language>
    <item>
      <title>RSpec + Capybara: Submitting forms</title>
      <dc:creator>Thato Semoko</dc:creator>
      <pubDate>Wed, 05 Aug 2020 11:01:38 +0000</pubDate>
      <link>https://dev.to/thatosmk/rspec-capybara-submitting-forms-792</link>
      <guid>https://dev.to/thatosmk/rspec-capybara-submitting-forms-792</guid>
      <description>&lt;p&gt;In the past I thought testing my code was a waste of time until the day my web application did not perform well in production -it was embarrassingly buggy.&lt;/p&gt;

&lt;p&gt;Since then I discovered &lt;a href="https://rspec.info/"&gt;RSpec&lt;/a&gt; and I fell in love with the tool and also behaviour driven development.&lt;a href="https://github.com/rspec/rspec-rails"&gt;RSpec rails&lt;/a&gt; becomes even more powerful with &lt;a href="https://github.com/teamcapybara/capybara"&gt;Capybara&lt;/a&gt; gem for even more robust testing with a look into how the user will interact with users.&lt;/p&gt;

&lt;p&gt;For instance, testing how the user signs up, i.e, filling in the sign up form.&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="s1"&gt;'rails_helper'&lt;/span&gt;

&lt;span class="no"&gt;RSpec&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt; &lt;span class="s2"&gt;"User Registration"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;type: :system&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;before&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;driven_by&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:rack_test&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;context&lt;/span&gt; &lt;span class="s2"&gt;"signs up a new user"&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;"signs a user up"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
      &lt;span class="n"&gt;visit&lt;/span&gt; &lt;span class="s1"&gt;'/users/sign_up'&lt;/span&gt;
      &lt;span class="n"&gt;within&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"#new_user"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="n"&gt;fill_in&lt;/span&gt; &lt;span class="s1"&gt;'Email'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;with: &lt;/span&gt;&lt;span class="s1"&gt;'user@example.com'&lt;/span&gt;
        &lt;span class="n"&gt;fill_in&lt;/span&gt; &lt;span class="s1"&gt;'Password'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;with: &lt;/span&gt;&lt;span class="s1"&gt;'password'&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;
      &lt;span class="n"&gt;click_button&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Sign up'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# submits the form&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;page&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;have_content&lt;/span&gt; &lt;span class="s1"&gt;'You have signed up successfully'&lt;/span&gt;
    &lt;span class="k"&gt;end&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 take things more deeper to test what parameters users submit to the database through your forms. Let's start with a &lt;em&gt;User&lt;/em&gt; model that requires &lt;em&gt;full_name&lt;/em&gt; to be present on new sign ups.&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;User&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;  
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:full_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Then we want to make sure that the form is not submitted unless this parameter is missing.&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="s1"&gt;'rails_helper'&lt;/span&gt;

&lt;span class="no"&gt;RSpec&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt; &lt;span class="s2"&gt;"User Registration"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;type: :system&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;before&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;driven_by&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:rack_test&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;context&lt;/span&gt; &lt;span class="s2"&gt;"does not sign up a new user"&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;"signs a user up"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
      &lt;span class="n"&gt;visit&lt;/span&gt; &lt;span class="s1"&gt;'/users/sign_up'&lt;/span&gt;
      &lt;span class="n"&gt;within&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"#new_user"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="n"&gt;fill_in&lt;/span&gt; &lt;span class="s1"&gt;'Email'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;with: &lt;/span&gt;&lt;span class="s1"&gt;'user@example.com'&lt;/span&gt;
        &lt;span class="n"&gt;fill_in&lt;/span&gt; &lt;span class="s1"&gt;'Password'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;with: &lt;/span&gt;&lt;span class="s1"&gt;'password'&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;
      &lt;span class="n"&gt;click_button&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Sign up'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# submits the form&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;page&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;have_content&lt;/span&gt; &lt;span class="s1"&gt;'First name can\'t be blank'&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="s2"&gt;"signs up a new user"&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;"signs a user up"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
      &lt;span class="n"&gt;visit&lt;/span&gt; &lt;span class="s1"&gt;'/users/sign_up'&lt;/span&gt;
      &lt;span class="n"&gt;within&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"#new_user"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="n"&gt;fill_in&lt;/span&gt; &lt;span class="s1"&gt;'Full name'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;with: &lt;/span&gt;&lt;span class="s1"&gt;'User Example'&lt;/span&gt;
        &lt;span class="n"&gt;fill_in&lt;/span&gt; &lt;span class="s1"&gt;'Email'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;with: &lt;/span&gt;&lt;span class="s1"&gt;'user@example.com'&lt;/span&gt;
        &lt;span class="n"&gt;fill_in&lt;/span&gt; &lt;span class="s1"&gt;'Password'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;with: &lt;/span&gt;&lt;span class="s1"&gt;'password'&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;
      &lt;span class="n"&gt;click_button&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Sign up'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# submits the form&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;page&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;have_content&lt;/span&gt; &lt;span class="s1"&gt;'You have signed up successfully'&lt;/span&gt;
    &lt;span class="k"&gt;end&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;The combination of these technologies has made me fall in love with testing (BDD). What are some of the use cases you have implemented with RSpec and Capybara.&lt;/p&gt;

</description>
      <category>rails</category>
      <category>backend</category>
    </item>
    <item>
      <title>Mentorship webapp using Rails </title>
      <dc:creator>Thato Semoko</dc:creator>
      <pubDate>Fri, 17 Jul 2020 09:00:56 +0000</pubDate>
      <link>https://dev.to/thatosmk/mentorship-webapp-using-rails-goi</link>
      <guid>https://dev.to/thatosmk/mentorship-webapp-using-rails-goi</guid>
      <description>&lt;p&gt;Mentorship has always been something I am passionate about. Over the past couple of months I have asked questions to try and figure out how to best tackle some of the challenges some mentorships face.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mentorship works, I believe this too.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With &lt;a href="https://staging.menteasy.co.za"&gt;Menteasy&lt;/a&gt;, I believe we can begin to support mentors/mentees such that their relationship is not only engaging but also fruitful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kXqe2EFO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mnpptg3x2efv1wmyhsu1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kXqe2EFO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mnpptg3x2efv1wmyhsu1.png" alt="sign up at staging.menteasy.co.za"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The webapp is in beta and would love to know what you guys think.&lt;/p&gt;

&lt;p&gt;You can also send me an email: &lt;a href="mailto:thatosmk@gmail.com"&gt;thatosmk@gmail.com&lt;/a&gt; for chats.&lt;/p&gt;

</description>
      <category>mentorship</category>
      <category>mentor</category>
      <category>career</category>
      <category>beta</category>
    </item>
    <item>
      <title>How do you test flutter code?</title>
      <dc:creator>Thato Semoko</dc:creator>
      <pubDate>Thu, 11 Jun 2020 11:29:39 +0000</pubDate>
      <link>https://dev.to/thatosmk/how-do-you-test-flutter-code-gk1</link>
      <guid>https://dev.to/thatosmk/how-do-you-test-flutter-code-gk1</guid>
      <description>&lt;p&gt;I have been creating a few custom widgets and I have been wondering what would be the best way to test state management in flutter. &lt;/p&gt;

</description>
      <category>flutter</category>
      <category>mobile</category>
      <category>appdevelopment</category>
      <category>testing</category>
    </item>
    <item>
      <title>Looking for a Vuejs markdown editor</title>
      <dc:creator>Thato Semoko</dc:creator>
      <pubDate>Tue, 28 Apr 2020 22:45:44 +0000</pubDate>
      <link>https://dev.to/thatosmk/looking-for-a-vuejs-markdown-editor-46b</link>
      <guid>https://dev.to/thatosmk/looking-for-a-vuejs-markdown-editor-46b</guid>
      <description>&lt;p&gt;I have been working with vuejs for a few weeks now and have started to love it. I want to be able to allow users to write and style posts with markdown syntax.&lt;/p&gt;

&lt;p&gt;Any good packages would be appreciated&lt;/p&gt;

</description>
      <category>vue</category>
      <category>markdown</category>
      <category>editor</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
