2016年4月21日木曜日

【Rails4.2.5】Teaspoonを使ってjavascriptのテストを行う

  • 公開日:2016年04月21日

記事概要

RailsでTeaspoonを使ってjavascriptのテストをおこなう方法をまとめた記事です。

環境

  • rbenv
  • bundler
  • rails 4.2.5
  • ruby 2.3.0
  • teaspoon 1.1.5

teaspoon

teaspoonはRailsでjavascriptのテストをおこなうライブラリです。
ブラウザテストの他にも、PhantomJS、Selenium WebDriver, Capybara Webkitでヘッドレス(ブラウザなし)のテストもできます。

インストール

teaspoonをインストールするには、Gemfileにライブラリ名を記載します。

{project_folder}/Gemfile

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug'
  gem 'rspec-rails'
  gem 'teaspoon'
  gem 'teaspoon-jasmine'
end

上記ではjavascriptのテストライブラリにjasmineを指定しています。
他にもMochaやQUnitに対応しています。

記述したら、コマンドラインからインストールします。

terminal

cd {project_folder}

bundle install

Using rspec-rails 3.4.2
Installing teaspoon 1.1.5
Using rails 4.2.5
Using sass-rails 5.0.4
Using web-console 2.3.0
Using turbolinks 2.5.3
Installing teaspoon-jasmine 2.3.4
Bundle complete! 27 Gemfile dependencies, 82 gems now installed.

続けて、必要なファイルをプロジェクトにinstallします。

terminal

cd {project_folder}

rails generate teaspoon:install

インストールが正常に完了したら、テストが実行できます。

テストコードの実装

テストコードは、{project_folder}/spec/javascript配下に置きます。ファイル名は、


***_spec.js

とします。

サンプルとして、top.jsのテストコードtop_spec.jsを記載します。

{project_folder}/spec/javascript/top_spec.js

describe("Top", function() {

  describe("top#getBaseUrl lang change", function() {

    it("should change top url.", function() {
      var baseUrl = getBaseUrl("http://localhost:3000/", "en");
      expect(baseUrl).toBe("http://localhost:3000/en");
    });

  });

});

jasmine形式でテストコードを記述します。テストコードでは、{project_folder}/app/assets/javascripts内のファイルに記載した関数を実行できます。

テストの実行と確認

テストを記載したら、railsを立ち上げます。ブラウザで


http://localhost:3000/teaspoon

に接続します。
以下のような画面がブラウザ上に表示されます。

テストを実行したブラウザ

正常にテストをおこなえました。

まとめ

railsでjavascriptのテストをするなら、teaspoonを利用すると便利です。
個人的には、Selenium WebDriver, Capybara Webkitを使うのはオススメしません。
テストにかかるトータルのコストと労力が見合っていないと思います。Cucumberも同様です。(以前は利用していたのですが、もう今は利用していません)

自分のコーディングスキルやアプリの仕様に合わせたテスト環境を構築してください。

以上。

PICK UP オススメ書籍

運営サイト(railsで作成しています)

参考記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2016年4月13日水曜日

【Rails4.2.5】 KaminariでFoundation6のページングに対応する

  • 公開日:2016年04月13日

記事概要

KaminariライブラリでFoundation6に対応したviweを作成する方法をまとめた記事です。

環境

  • rbenv
  • bundler
  • rails 4.2.5
  • ruby 2.3.0
  • kaminari 0.16.3

Kaminari

Kaminariはrailsでページング処理をおこなうライブラリです。
railsのデファクトのページングライブラリとして多くの人が利用しています。

Foundation6

人気のHTML templateフレームワークです。日本だと、Bootstrapの方が人気があります。

KaminariでFoundation6

Foundation6を利用してKaminariのデフォルトページング表示を利用すると、以下のような表示になります。

デザインの適用されないページングview

これではユーザーインターフェース的にユーザーが使いにくいので、デザインにkaminari_themesを適用します。

railsコマンドを利用して、以下のように導入します。

terminal

cd {project_folder}

bundle exec rails g kaminari:views foundation5

// result
downloading app/views/kaminari/_first_page.html.erb from kaminari_themes...
create  app/views/kaminari/_first_page.html.erb
downloading app/views/kaminari/_gap.html.erb from kaminari_themes...
create  app/views/kaminari/_gap.html.erb
downloading app/views/kaminari/_last_page.html.erb from kaminari_themes...
create  app/views/kaminari/_last_page.html.erb
downloading app/views/kaminari/_next_page.html.erb from kaminari_themes...
create  app/views/kaminari/_next_page.html.erb
downloading app/views/kaminari/_page.html.erb from kaminari_themes...
create  app/views/kaminari/_page.html.erb
downloading app/views/kaminari/_paginator.html.erb from kaminari_themes...
create  app/views/kaminari/_paginator.html.erb
downloading app/views/kaminari/_prev_page.html.erb from kaminari_themes...
create  app/views/kaminari/_prev_page.html.erb

引数でfoundation5を指定することでfoundation5とfoundation6に対応したviewがapp/views/kaminari/配下に作成されます。

確認

railsを立ち上げます。
実行結果を確認します。

デザインの適用されたページングview

綺麗にデザインされたviewが表示されました。

まとめ

railsでFoundation6を利用してページング処理を使う場合は、kaminari_themesを使うと便利です。
もちろん自分でデザインしても結構ですが、良いライブラリがある場合は利用したほうが、優れたアプリ生成できると思います。

以上。

PICK UP オススメ書籍

運営サイト(railsで作成しています)


参考記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2016年4月8日金曜日

【Rails4.2.5】 railsコマンドで指定ディレクトリにコントローラを作成する

  • 公開日:2016年04月08日

記事概要

railsで指定したディレクトリにコントローラーを作成する方法です。
さらに、ルーティング(route.rb)とユニットテスト(rspec)の記述方法をまとめた記事です。

環境

  • rbenv
  • bundler
  • rails 4.2.5
  • ruby 2.3.0
  • rspec-rails 3.4.2

指定ディレクトリにコントローラ

railsでアプリを開発する時、指定ディレクトリにコントローラーを作成したい場合があります。
例えば、フロント以外に必要な機能です。「admin」「api」「analysis」等が考えられます。

railsコマンド

コントローラーの作成はrailsコマンドを使います。ディレクトリを指定する場合は


rails generate controller {フォルダ名}:{クラス名}

とします。
ディレクトリ名とクラス名を「::」で区切ります。

実際にコマンドを叩きます。サンプルとして、analysisフォルダの下にtop_controller.rbを作成します。

terminal

cd {project_folder}

rbenv exec bundle exec rails generate controller analysis::top

実行結果を確認します。

terminal

ls -l app/controllers/

drwxr-xr-x 1 vagrant vagrant  102 Apr  6 02:30 analysis
-rw-r--r-- 1 vagrant vagrant 1615 Apr  4 23:20 application_controller.rb
drwxr-xr-x 1 vagrant vagrant  102 Feb  7 00:03 concerns

controllerフォルダの下にanalysisフォルダが作成されています。
続いて、analysisフォルダ下にtop_controller.rbファイルが作成されていることも確認しましょう。

terminal

ls -l app/controllers/analysis/

-rw-r--r-- 1 vagrant vagrant 95 Apr  6 04:07 top_controller.rb

top_controller.rbが作成されているのが確認できました。

ルーティング

次は、上記で作成したanalysisフォルダに接続できるルーティングの設定です。
config/routes.rbファイルに記述します。

まずは現在のanalysisフォルダへの指定なしのルーティングを確認します。

{project_folder}/config/routes.rb

    root to: 'top#index'
    get 'top/index'

パスをrake routes(bundle exec rake routes)コマンドで確認します。

terminal

               Prefix Verb   URI Pattern                      Controller#Action
                 root GET    /                                top#index
            top_index GET    /top/index(.:format)             top#index

analysisフォルダの指定がないことが確認できました。
次はフォルダを指定してルーティングを指定します。
フォルダの指定にはnamespaceを利用します。記述方法は


namespace モジュール名 [, オプション] do
  ルート定義
end

です。

実際にconfig/routes.rbファイルに記述します。

{project_folder}/config/routes.rb

    root to: 'top#index'
    get 'top/index'

    namespace :analysis do
      get 'top/index'
    end

再びrake routes(bundle exec rake routes)コマンドで確認します。

terminal

               Prefix Verb   URI Pattern                      Controller#Action
                 root GET    /                                top#index
            top_index GET    /top/index(.:format)             top#index
   analysis_top_index GET    /analysis/top/index(.:format)    analysis/top#index

analysisフォルダ以下を参照する「analysis/top#index」が正常に設定されました。

テスト

最後に、ルーティングのユニットテストを記載します。
テストはRspecコードで記述します。

この記事は、Rspecのインストールを終了している前提で話を進めます。
もし、Rspecのインストールをしていない場合は、この記事を参照してRspecのインストールをしてください。

まずはrouteを作成するテストファイルを作成します。

terminal

cd {project_folder}

cd spec/

mkdir routing

cd routing/

// specファイルを作成
touch site_route_spec.rb

{project_folder}/spec/routing/site_route_spec.rbファイルを作成後、ルーティングのテストコードを記述します。

{project_folder}/spec/routing/site_route_spec.rb

require 'rails_helper'

describe "routing for site" do

   describe 'GET analysis_top_index' do
     subject { {:get => analysis_top_index_path} }
     it { should be_routable }
     it { should route_to :controller => 'analysis/top', :action => 'index' }
   end

end

rspecのテストを実行します。

{project_folder}

cd {project_folder}
bundle exec rake spec

Finished in 3.67 seconds (files took 3.66 seconds to load)
24 examples, 0 failures, 3 pending

正常に動作することが確認できました。

まとめ

railsで指定ディレクトリにコントローラを作成する場合は、テストまでまとめてしっかりと記述しましょう。
もちろんMinitestで記述しても構いません。

以上。

PICK UP オススメ書籍

運営サイト(railsで作成しています)


参考記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...