質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

5702閲覧

[rails4.1.4 RSpec 3.0.4] libディレクトリ下に作成したモジュールのテストについて

a_ishidaaa

総合スコア8

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2014/09/04 17:02

(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の設定で読み込むように設定しています。

お手数ですが、

①なぜ、モデルがうまく認識されないか
②モジュールのテスト方法でこの方法は間違っていないか

助言をいただければと思います。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

RSpecでlibフォルダのテストをする場合の注意点
が参考になりませんか?

これで解決しなけれは、"rspec lib" とかで検索して、片っ端から情報をあつめるとか。

私が疑問なのは、app/helpers/ に置かずに lib/ に自作のコードを置いていること。
(app/helpers/*.rb なら、普通に rspec できると思う)
自作でない コードを テストしようとしているのかもしれませんが。

投稿2014/09/04 22:10

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

a_ishidaaa

2014/09/05 07:45

回答ありがとうございます! いただいた内容ですがうまくいかず、 結局のところrspec-rails 3.0からの仕様で、'spec_helper'をrequireするのではなく、'rails_helper'をrequireすることで解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問