&tag(Rails3+Guard+Spork+RSpec); *目次 [#d354be96] #contents *参考情報 [#m3f18d5c] -[[Rails3]] -[[Mac Rails3 Guard Spork RSpec セットアップ - 鳩舎:http://rosylilly.hatenablog.com/entry/2012/08/20/004408]] -[[これからテストを書き始めたい人のための Rails+RSpec+Spork+FactoryGir... #FactoryGirl #Spork #Rails #Rspec - Qiita [キータ]:http://qiita.com/items/fbe0a4ac2269a743dc17]] -[[ASCIIcasts - “Episode 285 - Spork”:http://ja.asciicasts.com/episodes/285-spork]] *基本 [#a814baea] -コマンドラインから毎回rspec実行は遅すぎる。 -Guardはファイル監視ユーティリティ。 -Sporkはテスト実行用サーバー。 -これらを組み合わせて高速にテストを実行するのが今風らしい(2013/04/23(火)) *インストール [#vecd5d32] **Gemfileを編集 [#r8df10ac] -Gemfileに追加する #pre{{ group :development, :test do # Rspec gem 'rspec-rails' # Spork gem 'spork' # Guard gem 'guard' gem 'guard-spork' gem 'guard-rspec' end }} -インストール $ bundle install --path vendor/bundle **RSpecのインストール [#r6fcc016] -spec_helper.rbなどを生成 $ bundle exec rails g rspec:install -実行してみる $ bundle exec rspec **Sporkのインストール [#qdc0932a] -以下のコマンドを実行 #pre{{ $ bundle exec spork --bootstrap }} -spec/spec_helper.rbを編集する。Instructtions以下ずらずらと書かれている部分を、Spork.preforkかSpork.each_runに移動すればよいらしい。[[ASCIIcasts - “Episode 285 - Spork”:http://ja.asciicasts.com/episodes/285-spork]]。とりあえず全部preforkに移動するのが一番速い。 #pre{{ require 'rubygems' require 'spork' #uncomment the following line to use spork with the debugger #require 'spork/ext/ruby-debug' Spork.prefork do # Loading more in this block will cause your tests to run faster. However, # if you change any configuration or code from libraries loaded here, you'll # need to restart spork for it take effect. # This file is copied to spec/ when you run 'rails generate rspec:install' ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'rspec/autorun' # Requires supporting ruby files with custom matchers and macros, etc, # in spec/support/ and its subdirectories. Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} RSpec.configure do |config| # ## Mock Framework # # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: # # config.mock_with :mocha # config.mock_with :flexmock # config.mock_with :rr # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures config.fixture_path = "#{::Rails.root}/spec/fixtures" # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false # instead of true. config.use_transactional_fixtures = true # If true, the base class of anonymous controllers will be inferred # automatically. This will be the default behavior in future versions of # rspec-rails. config.infer_base_class_for_anonymous_controllers = false # Run specs in random order to surface order dependencies. If you find an # order dependency and want to debug it, you can fix the order by providing # the seed, which is printed after each run. # --seed 1234 config.order = "random" end end Spork.each_run do # This code will be run each time you run your specs. end }} -実行する。 $ bundle exec spork -「Spork is ready and listening on 8989!」が表示されたら別のターミナルから--drbつきでrspecを実行 $ bundle exec rspec --drb -ここまででも毎回rspecでテストするよりは速くなっている。 **Guardのインストール [#e74ea5a5] -以下のコマンドを実行する $ bundle exec guard init spork $ bundle exec guard init rpsec -Guardfileを編集。rspecにcliオプションを追加する。 guard 'rspec', :cli => '--drb' do -実行する bundle exec guard ***ERROR - Could not start Spork server for RSpec, Test::Unit after 30 seconds. [#of5e953a] -以下のエラーがでた場合Guardfileを編集し、:waitを追加する guard 'spork', :wait => 10, -それでもだめな場合、rm -r test/する。[[ruby on rails - Guard + spork + Rspec issue - How do I remove hooks to Test::Unit? - Stack Overflow:http://stackoverflow.com/questions/14791957/guard-spork-rspec-issue-how-do-i-remove-hooks-to-testunit]] *Tips [#qd9a7069] **全てのテストを実行したい [#a3120581] -guard(main)>のプロンプトでリターンを押す。 *トラブルシューティング [#p730dd8c] **Rails4でuninitialized constant ActiveModel::Observingが発生 [#g53df313] -[[Rails4 で spork を動かすと`uninitialized constant ActiveModel::Observing (NameError)`になる時の対処法 - Qiita:http://qiita.com/ironsand/items/0b5ff8c46a384ddc92c6]]にあるように、Gemfileを修正後、bundle update。 #pre{{ # Rspec gem 'spork', '1.0.0rc4' }}