ROR Application Development Tips

I'm Ruby on Rails developer. I love to share my experience, technical knowledge. I work at Crypex Technologies which is developing applications in ROR for more than a decade.

RSpec is Bound to make an impact in TDD & BDD

What is Rspec?

 

Before implementing Rspec you should know what is the actual meaning of Rspec? R stands for ‘Ruby’ and the meaning of ‘Spec’ is Specification. RSpec is a unit test framework used in Ruby on Rails web application development. RSpec is 'Domain Specific Language' (DSL) testing tool. You should write Rspec in Ruby language to test your Ruby code.

 


Why do you use Rspec?

 

Rspec is an automated test case, used to test the code written by you while creating the application.
 

Developers follow the Rspec to write is known as TDD (Test Driven Development) and the Rspec written by the Testers, generally known as BDD (Behavior-driven development).

 

Advantages of Rspec:

 

There are several advantages of Rspec when you use it in your application.

 

  • Rspec always performs fast tests.
  • Rspec is very good for unit testing, that is testing models, controllers, and views.
  • If you develop the test cases with Rspec is easy and clear to Understand.
  • Much clear failure reports.
  • RSpec includes traditional Unit Testing, which means testing a class or part of the application in isolation from the rest of the application.
  • RSpec used for Acceptance Testing known as TDD (Test Driven Development) or BDD (Behaviour Driven Development) Specification.  These are support business-case driven Integration Tests.

 

How to setup Rspec in your Rails app?

 

Now to configure Rspec or to setup rspec in your application you should go through the following steps.

 

First you need to add rspec-rails to both the :development and :testgroups in the Gemfile:

1.  group :development, :test do

          gem 'rspec-rails', '~> 3.7'

     end

 

 

2.  Then you should run the command,

    bundle install

 

 

3.  Then you should initialize the spec/ directory with:

     rails generate rspec:install

 

This adds the following files which are used for configuration:

.rspec

spec/spec_helper.rb

spec/rails_helper.rb

 

If you want to add the files for your controller or model, then first you need to create the controller or model directory under spec folder and add the specific files inside those folders.


As an example you can say,spec/controllers/category_controller_spec.rb.

 

4. To run your specs you need to use the ‘rspec’ command.
     i.e ~$ rspec

 

What is the basic syntax of Rspec?

 

1) describe:

 

Here describe is the Rspec Keyword, which is generally used to define a class name or an example group or string arguments. This is the basic building blocks to organize the tests.

 

RSpec.describe HelloWorld, type: :class do

describe HelloWorld do

context "when testing the helloworld123 class" do

it "should say 'Hello World' when calling the method" do

hlo= HelloWorld.new

msg= hlo.say_hello

expect(msg).to eq "Hello World!"

puts "HelloWorld executed!"

end

end

end

end

 

2) context:

 

The context keyword is the same as describe keyword.  It also accepts the string arguments or class name.

 

Here context is a block which is used to describe the context, in which the class or method mentioned in the describe block is being used.

 

Example:

context "With valid input" do

 

3) it:

 

it keyword basically defines what is the example do. In simple word, you can say, what kind of test is performed that is defined by itkeyword. It also used in a block of a statement and it containsdo/end.

 

Example:

it 'create a new blog with a blog_name and description'

 

4) expect:

 

It defines what the expected output for the test is. It’s nothing but the expectations in rspec.

 

Sometimes need to use expect().to be true. It depicts the test result is expected to be true i.e positive test cases. Similarly  expect().to be false, it is expected the negative test results. RSpec uses a simple framework and keywords like should() and should _not() to express expectations.
 

Expect also use eql keyword i.e expect().to eq “hello”. Eql is basically a matcher that used to show the equality of test result with the expected result.

 

Example:

expect(response).to be_success

 

RSpec in Test Driven Development

 

RSpec in Behavior Driven Development

 

At last, I hope this article will be helpful to understand and implement Rspec in your ruby code and to cover all the scenarios (i.e including positive and negative test cases).

 

You can save a lot of your time while testing Ruby on Rails code making it faster. And overall it will be very much useful to write the automated test cases rather than using the manual test cases.