ラベル rspec の投稿を表示しています。 すべての投稿を表示
ラベル rspec の投稿を表示しています。 すべての投稿を表示

2010年5月8日土曜日

Cucumberインストールメモ

素に近いCentOSへのインストールのメモ。Railsは使わない。
(やったことを順に書いたので、「正しいインストール方法」としては読み辛い。)


  1. Rubyインストール

    yum install ruby ← 1.8.6以降が必要になり、後でソースから入れなおした
  2. Ruby Gemsインストール

    yum install rubygems ← Rubyを入れなおしたのでこちらもソースから入れなおした
  3. Cucumberインストール

    gem install cucumber
    最初はずっとcucamberと書いていてエラーにされた
  4. Webratインストール

    gem install webrat
    しようとしたらエラーになった。

    Building native extensions.  This could take a while...
    ERROR:  Error installing webrat:
            ERROR: Failed to build gem native extension.

    /usr/bin/ruby extconf.rb install webrat
    can't find header files for ruby.


    Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/nokogiri-1.4.1 for inspection.
    Results logged to /usr/lib/ruby/gems/1.8/gems/nokogiri-1.4.1/ext/nokogiri/gem_make.out

    1. 参考になりそうな記事を見つけた → gem で nokogiri, webrat放り込む時にエラーでた on Ubuntu 9.04 - ザ・職人
    2. libxml2はインストール済みだった
    3. libxml2-develインストール

      yum install libxml2-devel
      でもWebratはインストールできなかった
    4. libxsltはインストール済み
    5. libxslt-develインストール

      yum install libxslt-devel
      でもWebratはダメ
    6. もしかしてruby-devel?

      yum install ruby-devel
    7. webrat再チャレンジ

      gem install webrat
      入った!
  5. Mechanizeインストール

    gem install mechanize
  6. RSpecも必要?

    gem install rspec
これでインストール完了。

インストールされたバージョンは
  • Ruby 1.8.5
  • Cucumber 0.6.4
  • Webrat 0.7.0
  • Mechanize 1.0.0
  • RSpec 1.3.0



試しに動かしてみたい。
ここが参考になりそう → エンジニアは空を飛ぶ: Cucumber入門(1) 一番最初のCucumber
featureの日本語化についてはここを参考にやってみる → Ruby/cucumber/日本語を使う方法 - TOBY SOFT wiki


ディレクトリ作成
cd /tmp
mkdir cuke
cd cuke
mkdir features
mkdir features/step_definitions
mkdir features/support


環境設定ファイル作成
下記を参考に

vi features/support/env.rb
require 'spec/expectations'
require 'cucumber/formatter/unicode'

# Webrat
require 'webrat'

require 'test/unit/assertions'
World(Test::Unit::Assertions)

Webrat.configure do |config|
  config.mode = :mechanize
end

World do
  session = Webrat::Session.new
  session.extend(Webrat::Methods)
  session.extend(Webrat::Matchers)
  session
end


featureファイル作成
vi features/test.feature
# language: ja
機能: Cukeのテスト
  "Cucumber"をGoogle検索してCucumber関連の検索結果を得る

  シナリオ: 同上
    前提 "http://www.google.co.jp/"ページを表示している
    もし "cucumber"を検索する
    ならば "moroの日記"と表示されていること


stepsファイル作成(ためしにGivenだけ)
vi features/step_definitions/test_steps.rb
# -*- encoding: UTF-8 -*-

前提 /^"([^"]+)"ページを表示している$/ do |url|
  visit url
end
動かしてみる
cucumber
エラー発生
    前提 "http://www.google.co.jp/"ページを表示している # features/step_definitions/test_steps.rb:3
      undefined method `instance_variable_defined?' for #<Net::HTTP www.google.co.jp:80 open=false> (NoMethodError)
      (eval):2:in `visit'
      ./features/step_definitions/test_steps.rb:4:in `/^"([^"]+)"ページを表示している$/'
      features/test.feature:6:in `前提 "http://www.google.co.jp/"ページを表示している'

instance_variable_defined
はRuby1.8.6以降が必要らしい → rip のインストール - オボロぼろぼろ
Ruby1.8.6以降はyumでは見つからなかったので、ソースからコンパイルする必要があるようだ。


こちらを参考に → マルニカ。 CentOSに最新Rubyをインストール。

Rubyをアンインストール
yum remove ruby
gemsも一緒にremoveされた。

後は上記サイトのとおりに。
Rubyはなんとなく1.9.1を選んだ。
最新のバージョン番号は下記で確認で。

またひととおりCucumberからインストールし直しだ...

(Gemでインストールし直す。)

インストールされたバージョンは
  • Ruby 1.9.1
  • Cucumber 0.6.4
  • Webrat 0.7.0
  • Mechanize 1.0.0
  • RSpec 1.3.0

再チャレンジ
cucumber
3 steps (2 undefined, 1 passed)
「前提」が通った!


steps内の記述については下記が参考になりそう。

日本語でStepsを定義する際には書き方をmoro-misoに合わせておいた方が後々幸せになれるかも。


また、Cucumberの問題ではないが、CentOS 5.4でもprelinkはRuby-1.9.1のバイナリを破壊する、かも | Selfkleptomaniacという問題が発生したので、ここに書いてある対応をした。

2009年8月12日水曜日

ActiveResourceを使っている Controllerを RSpecでテストする例

参照系しか試してない。


下記の例では、MemberというActiveResourceをリスト表示したり詳細表示したりするControllerについて、RSpecでテストする。
(参考:ActiveResource の使い方(前編) : Rails 同士で通信する - WebOS Goodies ※「ユニットテスト」の項。RSpecではないけど。)

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'active_resource/http_mock'

describe MembersController do

 before do
  @member = {:id => 1, :name => 'foo'}

  @members = [@member]

  @header = Member.connection.__send__(:build_request_headers, {}, :get)

  ActiveResource::HttpMock.respond_to do |mock|
   mock.get '/members.xml', @header, @members.to_xml(:root => 'members')
   mock.get '/members/1.xml', @header, @member.to_xml(:root => 'member')
  end
 end

#後は普通にケースを書く
 #(略)

end

要するに、http_mockをrequireしておき、before()でモックが返すXMLを定義している。


ActiveResourceで取得する際にパラメータ付きのURLを使う場合、「mock.get」のところにもパラメータを付けなければいけないので注意。
例:
mock.get '/members.xml?q=keyword', @header, @members.to_xml(:root => 'members')



...と、ここまで書いてから、mockを使ってテストできることを知った。
 before do
  @member = mock_model(Member)
  Member.should_receive(:find).with(:all).and_return(@member)
  get 'index'
 end
ActiveResourceでもActiveRecordでもModelであることには違いがないから、ただMockを使えば良いだけだった。

HttpMockはむしろ、ActiveResource::Baseを継承したModelのテストのために使うのか。

RSpecの規約を覚えるためのリンク集とメモ

RSpecはDSLなので、決め事を覚えないと使いこなせない。
よく使うことになるであろう、参考リンクを列挙しておく。


前処理、後処理



aeertion(expectation)


change matcher


Controllerのテスト


Viewのテスト


Mock(mock_model)



参考:
 RSpec をもっと理解したかったので、まとめを作りました - takihiroの日記
 RSpec.info: Writing
 Index of /rspec (公式?仕様書)

RSpec on Railsのセットアップ

やったことのメモ。


インストール

gemでRSpecをインストール(もしかして不要?)

gem install rspec

RSpec-Railsもインストール(「ruby script/plugin install http://...」でインストールした方がいい?)
gem install rspec-rails
(rspec_railsだと見つからない)


generateする(とりあえずMemberモデルを対象に。)
ruby script/generate rspec
ruby script/generate rspec_model Member


なにはともあれ実行してみる
ruby script/spec spec/models/member_spec.rb
または
rake spec:models
などなど。(参考:RSpec on Rails でインストールされる rake タスク



ActiveRecordを使わない場合

そのままでは下記のようなエラーになる。
.../spec/spec_helper.rb:16: undefined method `use_transactional_fixtures=' for #<Spec::Runner::Configuration:0x1234567> (NoMethodError)
上記のソース(spec/spec_helper.rb)にはこう書いてある。
# If you're not using ActiveRecord you should remove these
# lines, delete config/database.yml and disable :active_record
# in your config/boot.rb
config.use_transactional_fixtures = true
config.use_instantiated_fixtures = false
config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
書いてあるとおり、この3行を削除したら無事動いた。



参考:
 Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)
 Rubyist Magazine - スはスペックのス 【第 2 回】 RSpec on Rails (コントローラとビュー編) (続きは...?)
 RSpec on Railsを試してみた。 - ひげろぐ

ブログ アーカイブ

tags