(rails_home)/lib下にモジュールを作成し、rails内でモジュールをインクルードして利用しています。モジュールはあるModelからデータを取得し、他のModelへデータをInsertする役割を担います。
require 'rss' module DiffMerge def fetch(id) s = SiteMaster.find(id) rssdata = RSS::Parser.parse(s.url) entries = [] record_timestamps = Entry.where('site_master_id = ?',id).select("entry_date") rssdata.items.each do |e| break if registered(e.dc_date.localtime, record_timestamps) entry = Entry.new entry.site_master_id = s.id entry.title = e.title entry.link = e.link entry.entry_date = e.dc_date.localtime entry.description = e.description entries << entry end Entry.import entries return entries.count end def registered(timestamp,record_timestamps) record_timestamps.each do |t| if t.entry_date ==timestamp return true; end end return false; end end
このモジュールのテストを書いてみよう(本来は順番逆ですが、始めたばかりなのですいません)と思ったのですが、RSpecでやろうとしても、うまくモジュールを読み込んでくれなかったり、モジュールをロードパスに含めたら今度はモデル(ここだとSiteMaster)が、モデルとしてではなく、DiffMergeモジュール下のモジュールとして認識されているようでした。
Failure/Error: expect(fetch(1)).to exist NameError: uninitialized constant DiffMerge::SiteMaster
書いたRspecのコードは下記になります。
bash-3.2$ cat spec/diff_merge_spec.rb require 'spec_helper' describe "DiffMerge" do it "should return" do expect(fetch(1)).to exist end end
DiffMerge自体はspec_helperの設定で読み込むように設定しています。
お手数ですが、
①なぜ、モデルがうまく認識されないか
②モジュールのテスト方法でこの方法は間違っていないか
助言をいただければと思います。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/09/05 07:45