Join the social network of Tech Nerds, increase skill rank, get work, manage projects...
 
  • Testing In Rails: Introduction and Creating Test Data

    • 1
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 580
    Comment on it

    Testing In Rails: Introduction and Creating Test Data

     

    Hi friends,
    Even if you write code considering every case in mind there is always a chance that your code contains bugs. So the best way of writing a code that contains least number of bugs is writing a code along with its test cases. In this blog I am going to give you a brief idea about how we can write test cases in rails application without using any major third party software.
    Rails has a built in framework of test cases that makes it really very easy to write cases. Once you create any component in rails including either application, controllers or models using its generators, it automatically creates supported test files, where you can write your test cases. For example if you run 

    > rails new MyTestingApp
    # Along with the whole project directory it will also create a section for test like:
         create  test/fixtures
        create  test/fixtures/.keep
        create  test/controllers
        create  test/controllers/.keep
        create  test/mailers
        create  test/mailers/.keep
        create  test/models
        create  test/models/.keep
        create  test/helpers
        create  test/helpers/.keep
        create  test/integration
        create  test/integration/.keep
        create  test/test_helper.rb
    
    # Similarly during controllers:
    > rails g controller welcome
    # Along with controller and view folder it will create the following section too:
        invoke  test_unit
        create    test/controllers/welcome_controller_test.rb
        invoke  helper
        create    app/helpers/welcome_helper.rb
        invoke    test_unit
    

    Thus we can see that as soon as we create an application, rails promotes us to write test cases. As we all know rails has different environment for running the application. i.e. Development, Production and Testing. So the testing enviroment is run while running the test cases. It also has separate database that can be defined inside the config/database.yml. A different database allows you to freely test the application without having any tension related to data loss or misuse. If you closely look at the test folder it will have different components that are present in your application. i.e. controllers, helpers, mailers, test_helper.rb, fixtures, integrations and models. In these files test_helper.rb is used for storing the default configurations for all the other files.

    Creation of Test Data:
    Creation of test data can be done using different techniques, one of them that are by default present with your application is using fixtures, which are used for storing data. They are actually a YAML files that can store some test data, they are associated with models and used to populate data from yaml files to tables before you run the test cases. As soon as you create a model using generator, an associated fixture file is generated with the model. i.e.

    > rails g model MyProduct title:string description:string price:string
    #=>
        invoke  active_record
        create    db/migrate/20160623174156_create_my_products.rb
        create    app/models/my_product.rb
        invoke    test_unit
        create      test/models/my_product_test.rb
        create      test/fixtures/my_products.yml
    

    If we open my_products.yml, we can see it already created two test records for my_products table.

        one:
          title: MyString
          description: MyString
          price: MyString
    
        two:
          title: MyString
          description: MyString
          price: MyString
    

    Now when you run a test cases it will actually perform these 3 tasks: a) Remove all the existing data from the table b) Import the data from the yaml file into the table c) Store the fixture data in a table to use it directly. They can also be accessed like an active record object:

    my_products(:one)
    #=> will return an object of MyProduct with name one
    

    One more way of creating test data is using factory_girl_rails gem, that is actually a replacement for fixture data. It provides a much easy of creating data just like you do with models. For using it you need to add the gem file in the test group in your Gemfile like this:

        group :test do
          gem 'factory_girl_rails'
        end
        # after that run bundle
        > bundle
    

    A sample factory_girl file is like this:

        FactoryGirl.define do
          factory :my_product do
            title "MotoG"
            description "Mobile Phone"
            price 100
          end
        end
    

    Now to create a my_product you can simply write:

        product = build(:my_product)
        #This will initialize a MyProduct object
        
        product = create(:my_product)
        #This will create a MyProduct object
    

    For more information regarding the use of factory_girl and its configuration you can go through the link Factory Girls Configurations
    Thus we are done with creating sample data in test cases, In the next chapters we will see how we can test our models using unit test cases and also will talk about testing the controller, links for them are given below:

    Testing In Rails: Unit Testing In Models
    Testing In Rails: Functional Testing For Controllers

 0 Comment(s)

Sign In
                           OR                           
                           OR                           
Register

Sign up using

                           OR                           
Forgot Password
Fill out the form below and instructions to reset your password will be emailed to you:
Reset Password
Fill out the form below and reset your password: