2014年3月29日土曜日

rails4 Turnipで受け入れテストを書く その1

環境

  • rails(ruby2.1.0, rails4.0.3)アプリ
  • mongoDB

railsでソフトウェアを作成するとき、テストにRspecを使っています。
Cucumberも使おうと何回か考えたのですが、テストを記載するコストと釣り合わないなあと感じていて結局は使ったことがありませんでした。なによりDHHが批判しているので使う気が起きませんでした。参考
しかし、今のrails4時代には、Turnipという受け入れテストがメインに変わりつつあるようです。
Turnipの良い点は、Cucumberと異なりRSpecに一本化できることです。これにより管理がかなり楽になるようです。
ざっと見たところ、学習コストも良さそうなので、プロジェクトに導入してみようと思います。

そんなわけでTurnipをテストツールとして使ってみたので、そのメモです。アプリは完成している前提です。
あと、Cucumberの経験がまったくない場合は、Turnipを使うのはかなり厳しいので、以下の本を買って基礎だけは済ませておきましょう。

Turnip導入前には必ずgitなどでcommitしておきましょう。

Gemfile記述


group :test do
  gem "database_cleaner", ">= 0.9.1"
  gem "email_spec", ">= 1.4.0"
  # 以下を追加
  gem 'capybara'
  gem 'capybara-webkit'
  gem 'poltergeist'
  gem 'turnip'
end

bundle update


Command 'qmake -spec macx-g++ ' not available

Makefile not found

bundleに失敗。ここを見るとQtがないのが原因とのこと。

Qt導入


brew upgrade

brew install qt

結構時間がかかります。その後、再びbundle update。成功後、spec_helper.rbに以下を記載


# Turnip directory
Dir.glob("spec/steps/**/*steps.rb") { |f| load f, true }

# Turnip library
require 'capybara/dsl'
require 'capybara/rspec'
require 'capybara/webkit'
require 'capybara/poltergeist'
require 'rspec/rails'
require 'rspec/autorun'
require 'turnip'
require 'turnip/capybara'

.rspecに以下を追記


-r turnip

specフォルダ以下にfeaturesフォルダとstepsフォルダを作成


cd spec/
mkdir features
mkdir steps

featuresフォルダにhoge.featureファイルを作成


touch hoge.feature

viで開いてhoge.featureファイルに以下のテスト内容を記載。書き方はCucumberと同じ


Feature: 戦闘

  Scenario: 柔い敵と戦闘
    Given "スライム" が現れた!
    When 勇者の攻撃!
    Then モンスターを倒した

  Scenario: 固い敵と戦闘
    Given "はぐれメタル" が現れた!
    When 勇者の攻撃!
    Then モンスターを倒せなかった

bundle exec rspecで実行


    # No such step: '"はぐれメタル" が現れた!'
    # ./spec/features/hoge.feature:9
  戦闘 柔い敵と戦闘 "スライム" が現れた! -> 勇者の攻撃! -> モンスターを倒した
    # No such step: '"スライム" が現れた!'
    # ./spec/features/hoge.feature:4

    Finished in 3.87 seconds
    58 examples, 0 failures, 9 pending

テストで試験が通ったことを確認。次は、実際にtopページのfeatureファイルを記載していきます。

参考サイト

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

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

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...