2012/10/15

define_method で可変長引数のメソッドを定義する

色々試してみたけど、こうすればいいみたい。
ポイントは7行目の *params と 9行目の *args かな。

2012/10/12

RSpec で undefined method `fixtures'

RSpec で fixtures が動かない

rspec でテストデータを用意して、fixtures メソッドを使用したら、そんなメソッドねーよ。と言われた。

/Users/pinzolo/projects/mastar/spec/mastar/name_value_pair_spec.rb:30:in `block (2 levels) in <top (required)>': undefined method `fixtures' for #<Class:0x007faa888623a8> (NoMethodError)
    from /Users/pinzolo/projects/mastar/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval'
    from /Users/pinzolo/projects/mastar/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `subclass'
...

TestFixtures を include してみる

spec_helper.rb に下記を追加してみる。

require 'rspec'
RSpec.configure do |config|
    config.include ActiveRecord::TestFixtures
end

実行してみる。

/Users/pinzolo/projects/mastar/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.8/lib/active_record/fixtures.rb:728:in `block in <module:TestFixtures>': undefined method `setup' for #<Class:0x007fb3c20527d8> (NoMethodError)
    from /Users/pinzolo/projects/mastar/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active_support/concern.rb:119:in `class_eval'
    from /Users/pinzolo/projects/mastar/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active_support/concern.rb:119:in `append_features'
...

こんどは setup がないと。

調べてみると

https://github.com/rspec/rspec-rails/blob/master/lib/rspec/rails/fixture_support.rbを見ると RSpec::Rails::FixtureSupport を include していて、その時に各種設定メソッドが追加されている。

結局

rspec-rails をインストールしないと fixtures は使えないのか。
できれば、関連 gem を増やしたくないので、他の手段を考えよう。
factory-girl がいいのかな。