チュートリアルをする。静的なページ編
以下はチュートリアルをやったログである。
準備
Test::Unitフレームワークなしでアプリ作成
rails new sample_app --skip-test-unit
gemfile更新
テスト用のRSpecが使えるようにする。
source 'https://rubygems.org' ruby '2.0.0' #ruby-gemset=railstutorial_rails_4_0 gem 'rails', '4.0.5' group :development, :test do gem 'sqlite3', '1.3.8' gem 'rspec-rails', '2.13.1' end group :test do gem 'selenium-webdriver', '2.35.1' gem 'capybara', '2.1.0' end gem 'sass-rails', '4.0.5' gem 'uglifier', '2.1.1' gem 'coffee-rails', '4.0.1' gem 'jquery-rails', '3.0.4' gem 'turbolinks', '1.1.1' gem 'jbuilder', '1.0.2' group :doc do gem 'sdoc', '0.3.20', require: false end group :production do gem 'pg', '0.15.1' gem 'rails_12factor', '0.0.2' end
Bundlerで更新
bundle install --without production bundle update bundle install
秘密キーを動的に生成するようにする。
config/initializers/secret_token.rb
をチュートリアルのように書き換える。
.gitignoreを更新、.secretがgitに入らないようにする。
# Ignore bundler config. /.bundle # Ignore the default SQLite database. /db/*.sqlite3 /db/*.sqlite3-journal # Ignore all logfiles and tempfiles. /log/*.log /tmp # Ignore other unneeded files. doc/ *.swp *~ .project .DS_Store .idea .secret
gitリポジトリ作成
git init git add . git commit -m "Initilize repository"
rails generate rspec:install
コミット
git add . git commit -m "setup RSpec"
readmeを書き換える。
.mdファイルにする。
git mv README.rdoc README.md
コミット(aとmオプションはまとめてamで)
git commit -am "Improve the README"
git remote add origin https://github.com/UserName/sample_app.git git push -u origin master
herokuアプリ作成
heroku create git push -u origin master heroku run rake db:migrate
なるべく本番環境でエラーを発見するようにすると良いらしい。
herokuのlogをみる。
heroku logs
静的ページ作る
gitでトピックブランチ作成
git checkout -b static-pages
StaticPagesコントローラのhomeアクション、staticアクションの作成。(RSpecは今使わない。)
rails generate controller StaticPages home help --no-test-framework
失敗したときは
rails destroy controller StaticPage home help
で元に戻せるらしい。
マイグレーションの方は
rake db:rollback
最初にもどすには
rake db:migrate VERSION=0
config/routes.rbでルーティングが更新されていることを確認。
ローカルサーバでもみてみる。
rails server
http://localhost:3000/static_pages/home
app/controllers/static_pages_controller.rbでStaticPagesコントローラの中身を確認。
homeとhelpメソッドが定義されている。
これらは空だが、ApplicationControllerからの継承によってビューの出力をする。
ビューを確認する。app/views/static_pages/home.html.erb
gitにコミット
git add . git commit -m "Add a StaticPages controller"
テスト
結合テスト(Integration test、RSpecではrequest spec)と単体テスト(unit test)がある。
ここでは結合テストを行う。
結合テスト生成
rails generate integration_test static_pages
spec/requests/static_pages_spec.rbを書き換える。
require 'spec_helper' describe "Static pages" do describe "Home page" do it "should have the content 'Sample App'" do visit '/static_pages/home' expect(page).to have_content('Sample App') end end end
- describeは単なるメモ 、"should have the content 'Sample App'"も単なるメモ、
- visit '/static_pages/home' URLにアクセス(Capybaraのvisit機能)
- expect(page).to have_content('Sample App') アクセスした結果が入っているpage変数にSample Appという文字列が含まれているか。
この書法を理解させるためにCapybara DSLを追加する必要あり。
spec/spec_helper.rbに
config.include Capybara::DSL
を追加。
rspecを実行してみる。(bundle execはGemfile内で定義された環境でrspecを実行させるためにつけてあるらしい。)
bundle exec rspec spec/requests/static_pages_spec.rb
失敗するので、homeのビューのタイトルをSample Appにする。
app/views/static_pages/home.html.erb
<h1>Sample App</h1> <p> This is the home page for the <a href="http://railstutorial.jp/">Ruby on Rails Tutorial</a> sample application. </p>
これでもう一度テストしてみる。
bundle exec rspec spec/requests/static_pages_spec.rb
うまくいかない。
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x007fa305078938>
RspecをRails 4.1で動かすまでの話 - Taught by Myself
を参考にspec/featuresフォルダを作りそこにstatic_pages_spec.rbを入れてみる。
特に変わらない。
spec_helper.rbにrequire 'capybara/rspec'を入れる。
特に変わらない。
そもそもCapybaraが入ってない?
違うようだ。
Rails - RSpec3.2でCapypara使ってて undefined method `visit’と出る時 - Qiita
に違い
gemfileのCapybaraを2.2.0に修正
gem 'capybara', '2.2.0'
Bundlerで更新
require 'rspec/rails' require 'capybara/rspec' require 'rspec/autorun'
spec_helper.rbで
require 'capybara/rspec'
を追加しconfigにconfig.include Capybara::DSLを追加。
だめ。
capybaraを2.1.0に戻す。
どうにも問題が解決しないのでテスト駆動はスルーすることにする。
capybaraを2.4.0にしてみる。
capybaraのサイトをみてみる。
jnicklas/capybara · GitHub
諦めた。テストは一端無視してチュートリアルでできることをやる。