Rodhos Soft

備忘録を兼ねた技術的なメモです。Rofhos SoftではiOSアプリ開発を中心としてAndroid, Webサービス等の開発を承っております。まずはご相談下さい。

チュートリアルをする。静的なページ編

以下はチュートリアルをやったログである。

railstutorial.jp

準備

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"

RSpecを使うようにrailsを設定

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"

githubリポジトリを作ってpush

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
  1. describeは単なるメモ 、"should have the content 'Sample App'"も単なるメモ、
  2. visit '/static_pages/home' URLにアクセス(Capybaraのvisit機能)
  3. 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

諦めた。テストは一端無視してチュートリアルでできることをやる。