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

2014/06/13

Redmine のプラグインを RSpec3 でテスト出来ない

pinzolo/redmine_persist_wfmt を RSpec3 に対応しようとしてみたが実行すら出来なかった。
/Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/rspec-support-3.0.0/lib/rspec/support/version_checker.rb:28:in `raise_too_low_error': You are using capybara 2.1.0. RSpec requires version >= 2.2.0. 
(RSpec::Support::LibraryVersionTooLowError)
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/rspec-support-3.0.0/lib/rspec/support/version_checker.rb:18:in `check_version!'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/rspec-rails-3.0.1/lib/rspec/rails/vendor/capybara.rb:13:in `'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `require'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `block in require'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:236:in `load_dependency'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `require'
        .... and more
Redmine 本体の Gemfile で gem "capybara", "~> 2.1.0" なのだが、RSpec3 で Capybara を使用するには 2.2.0 以上を要求される。
このエラーは実行時でなく事前チェックで投げられているようで、 Capybara をプラグインのテストで使用していなくても出る。
さすがに本体のバージョンを無視するわけにはいかないので、当分は gem "rspec", "~> 2.14.0" で行こうと思う。
というか、やっぱりこういうのを避けるためには ActiveSupport::TestCase で書いたほうがいいんだろうな。

RSpec3ではもう-cfsオプションは許してくれない

2.1.2 とか Rails 4.1 での CI 設定を手持ちの gem に一気に済ませてビルドしたら一気にコケた。
tekido #20
formap #36

こんな感じでコケる。
/home/travis/.rvm/rubies/ruby-2.1.2/bin/ruby -I/home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.1/lib:/home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-support-3.0.0/lib -S /home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.1/exe/rspec spec/formup/attr_def_spec.rb spec/formup/source_spec.rb spec/formup_boolean_cast_spec.rb spec/formup_included_spec.rb spec/formup_initialize_spec.rb spec/formup_load_spec.rb spec/formup_params_for_spec.rb spec/formup_source_called_spec.rb spec/formup_validation_spec.rb -cfs
/home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.1/lib/rspec/core/formatters.rb:167:in `find_formatter': Formatter 's' unknown - maybe you meant 'documentation' or 'progress'?. (ArgumentError)
 from /home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.1/lib/rspec/core/formatters.rb:126:in `add'
 from /home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.1/lib/rspec/core/configuration.rb:624:in `add_formatter'
 from /home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.1/lib/rspec/core/configuration_options.rb:106:in `block in load_formatters_into'
 from /home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.1/lib/rspec/core/configuration_options.rb:106:in `each'
 from /home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.1/lib/rspec/core/configuration_options.rb:106:in `load_formatters_into'
 from /home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.1/lib/rspec/core/configuration_options.rb:24:in `configure'
 from /home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.1/lib/rspec/core/runner.rb:96:in `setup'
 from /home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.1/lib/rspec/core/runner.rb:85:in `run'
 from /home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.1/lib/rspec/core/runner.rb:70:in `run'
 from /home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.1/lib/rspec/core/runner.rb:38:in `invoke'
 from /home/travis/.rvm/gems/ruby-2.1.2/gems/rspec-core-3.0.1/exe/rspec:4:in `
'
原因はここ。 要するに「s なんてフォーマット知らないよ」ということ。
bundle exec rspec --helpしても確かにそんなものはない。ていうか、2.14の頃からすでにない。
ググったらたくさん出てくるので、かつてはあったんだろう。
2.14のころは許容していたのか、厳密ではなかったのかしらないが3からは厳密になったということかな。
さあ、あなたの Rakefile や .rspec も見なおしてみましょう。

2013/09/08

RedmineのプラグインをRSpecでテストする

Redmineは基本的にはxUnitなコードでテストが書かれています。
今のところ例に習いxUnit形式でテスト書いていたんだけど、RSpecで書きたいなという欲求は当然あるわけです。
なので今回RSpecを導入してみた。

まずは、$REDMINE/plugins/<plugin_name>/Gemfile を作成して、bundle install

# Gemfile
group :development, :test do
  gem "rspec-rails", ">= 2.8.1"
end

$REDMINE/plugins/<plugin_name>/spec/spec_helper.rbを作成し、設定を記述。

require File.expand_path(File.dirname(__FILE__) + '/../../../spec/spec_helper')
RSpec.configure do |config|
  config.mock_with :mocha
  config.fixture_path = "#{::Rails.root}/test/fixtures"
end

各種specファイルの冒頭で spec_helper をrequireする。

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
# require 'spec_helper' ではダメだった。

基本的にはこれで設定はいいはずだけど、なぜかspecタスクで実行できない。
実行できないというよりspecファイルが見つけられないらしい。
rspec コマンドを指定しても不可能。
ベースディレクトリを指定してやれば実行できた。

$ bundle exec rake spec                             # ダメ
$ bundle exec rspec                                 # これもダメ
$ bundle exec rake spec plugins/<plugin_name>/spec  # これでもダメ
$ bundle exec rspec plugins/<plugin_name>/spec      # これはOK