12/08/2018, 14:04

Try to use turnip_support gem

turnip-support is a gem that support testing features of Rails applications using turnip, rspec and headless browser. Now i will show an example to test Rails application with turnip_support gem. Design database Role id name User id name login_id role_id password ...

turnip-support is a gem that support testing features of Rails applications using turnip, rspec and headless browser.

Now i will show an example to test Rails application with turnip_support gem.

Design database

  • Role

    • id
    • name
  • User

    • id
    • name
    • login_id
    • role_id
    • password
    • password_confirmation

Create new rails project

rails new turnip_support_example
  • Create models
rails generate scaffold Role name:string
rails generate scaffold User name:string login_id:string role:references password:string password_confirmation:string
  • Run
rake db:create
rake db:migrate
rails s
  • Open your browser and access to http://localhost:3000/roles to check.

Create factories for each model

  • Create folder spec/factories
  • Create 2 file with below contents:

○ spec/factories/users.rb

FactoryGirl.define do
  factory :user do
    sequence(:login_id){|n| "user#{n}"}
    sequence(:name){|n| "Admin User #{n}"}
    role {FactoryGirl.create :role}
    password "12345678"
    password_confirmation "12345678"
  end
end

○ spec/factories/roles.rb

FactoryGirl.define do
  factory :role do
    sequence(:name){|n| "role-#{n}"}
  end
end

Configuration

  • Add gem "turnip_support", git: "git@github.com:ThuBM/turnip_support.git" to group :test of your Gemfile
  • Run
bundle install
bundle exec rake turnip_support init

Create test case with google spread sheet

  • Create a spread sheet with content like below spread sheet

Test case sample

  • Create file config.json Follow This tutorial Result is a file has content:
{
 "client_id": "xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
 "client_secret": "xxxxxxxxxxxxxxxxxxxxxxxx"
}
  • Move this file to folder spec/configs
  • Create spec/configs/list_user.yml file with below content:
spreadsheet_key: 1IHXpmlxUbkioauITZNgtFoYzlixHh1yKzsbD1w1aQ6Y
config_file: config.json
worksheet_order_number: 0

1IHXpmlxUbkioauITZNgtFoYzlixHh1yKzsbD1w1aQ6Y is test case's spread sheet key. config.json is the name of just created json file what is placed in spec/configs folder. worksheet_order_number is the order number of test case worksheet in the test case spread sheet.

  • Save

Create feature file

  • Run
bundle exec rake turnip_support list_user list_user.yml

with list_user param is the feature name,

list_user.yml is the configuration file what is just created and placed in spec/configs folder.

At the first time, below message will be displayed.

1. Open this page:
https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&scope=https://www.googleapis.com/auth/drive%20https://spreadsheets.google.com/feeds/

2. Enter the authorization code shown in the page:

Copy displayed link and paste to browser, you can see the authorization code. Copy this code and paste to terminal then press Enter.

If below error is appeared,

Google::Apis::ClientError: accessNotConfigured: Access Not Configured. Drive API has not been used in project PROJECT_ID before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/drive/overview?project=PROJECT_ID then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

please access to https://console.developers.google.com/apis/api/drive/overview?project=PROJECT_ID and enable the Google Drive API then run again:

bundle exec rake turnip_support list_user list_user.yml

Run testing

bundle exec rspec spec/features/list_user.feature

Reference

  • turnip_support
0