ActiveRecordを継承していない、DB処理を含まないモデルもRSpecの対象にするには?

前の日記からの続き。
疑問は解決しないのでコメントがあるととってもよろこぶ。

rails hoge


create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create config/initializers
create config/locales
create db
create doc
create lib
create lib/tasks
create log
create public/images
create public/javascripts
create public/stylesheets
create script/performance
create test/fixtures
create test/functional
create test/integration
create test/performance
create test/unit
create vendor
create vendor/plugins
create tmp/sessions
create tmp/sockets
create tmp/cache
create tmp/pids
create Rakefile
create README
create app/controllers/application_controller.rb
create app/helpers/application_helper.rb
create config/database.yml
create config/routes.rb
create config/locales/en.yml
create db/seeds.rb
create config/initializers/backtrace_silencers.rb
create config/initializers/inflections.rb
create config/initializers/mime_types.rb
create config/initializers/new_rails_defaults.rb
create config/initializers/session_store.rb
create config/initializers/cookie_verification_secret.rb
create config/environment.rb
create config/boot.rb
create config/environments/production.rb
create config/environments/development.rb
create config/environments/test.rb
create script/about
create script/console
create script/dbconsole
create script/destroy
create script/generate
create script/runner
create script/server
create script/plugin
create script/performance/benchmarker
create script/performance/profiler
create test/test_helper.rb
create test/performance/browsing_test.rb
create public/404.html
create public/422.html
create public/500.html
create public/index.html
create public/favicon.ico
create public/robots.txt
create public/images/rails.png
create public/javascripts/prototype.js
create public/javascripts/effects.js
create public/javascripts/dragdrop.js
create public/javascripts/controls.js
create public/javascripts/application.js
create doc/README_FOR_APP
create log/server.log
create log/production.log
create log/development.log
create log/test.log

cd fuga
script/generate rspec


Configuring rspec and rspec-rails gems in config/environments/test.rb ...

exists lib/tasks
create lib/tasks/rspec.rake
create script/autospec
create script/spec
create spec
create spec/rcov.opts
create spec/spec.opts
create spec/spec_helper.rb

ruby script/generate rspec_model utf8_convate_util


exists app/models/
create spec/models/
create spec/fixtures/
create app/models/utf8_convate_util.rb
create spec/models/utf8_convate_util_spec.rb
create spec/fixtures/utf8_convate_utils.yml
create db/migrate
create db/migrate/20110928111700_create_utf8_convate_utils.rb

いらないの削除。DB伴わないので
rm spec/fixtures/utf8_convate_utils.yml
rm db/migrate/20110928111700_create_utf8_convate_utils.rb

vim app/models/utf8_convate_util.rb


class Utf8ConvateUtil # < ActiveRecord::Base #継承しない!

def self.parse_to_utf8(str)
case NKF.guess(str)
when NKF::JIS then str.kconv(Kconv::UTF8, Kconv::JIS).strip
when NKF::EUC then str.kconv(Kconv::UTF8, Kconv::EUC).strip
when NKF::SJIS then str.kconv(Kconv::UTF8, Kconv::SJIS).strip
when NKF::BINARY then str.kconv(Kconv::UTF8, Kconv::BINARY).strip
when NKF::ASCII then str.kconv(Kconv::UTF8, Kconv::ASCII).strip
when NKF::UTF8 then str.strip
when NKF::UTF16 then str.kconv(Kconv::UTF8, Kconv::UTF16).strip
end
end

end

vim spec/models/utf8_convate_util_spec.rb


describe Utf8ConvateUtil do
#before(:each) do
# @valid_attributes = {
#
# }
#end

it "should create a new instance given valid attributes" do
NKF::UTF8 == NKF.guess(Utf8ConvateUtil.parse_to_utf8("あああ"))
end
end

適当なテストかけだし以下なのでこの内容はそっとしといてください・・・


vim config/database.yml


development:
adapter: mysql
database: rspec_non_table
username: root
password: xxxxx

test:
adapter: mysql
database: rspec_non_table
username: root
password: xxxxx

簡易的なテストにより、両方一緒のを書いた。

spec spec/models/utf8_convate_util_spec.rb


F

1)
Mysql::Error in 'Utf8ConvateUtil should create a new instance given valid attributes'
Unknown database 'rspec_non_table'


Finished in 0.01274 seconds

1 example, 1 failure

データベースねーよって怒られた。

しょうがないので既存のDBをconfig/database.ymlに書き換えて指定してみた。

もう一度。

spec spec/models/utf8_convate_util_spec.rb


.

Finished in 0.012205 seconds

1 example, 0 failures



あれ!?通った。
spec/spec_helper.rbの


Spec::Runner.configure do |config|
# 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行コメントアウトしたり、

config/environment.rbの


# config.frameworks -= [ :active_record, :active_resource, :action_mailer ]
コメントアウトをはずして、無理やりにやって

「テスト通った!でもこれじゃActiveRecord継承したものと共存出来ない!」
と思ったけど、問題なかった。


やった後にテーブル作られるってことも無さそう。

杞憂(ちょっと意味が違うか)な数時間だった。
考えて詰まりすぎてた。


やっぱりMVCのMはデータベースアクセスが必須ではない!(と思う)