Railsのテストフレームワークには、Mockを利用する仕組みがあります。 しかし、通常の方法でMockクラスを作成すると、オリジナルのクラスを 完全に置き換えてしまうため、すべての実装をテスト用に 書き直さなければならなくなってしまいます。

そこで、テスト用に改変したい場所だけMockで上書きし、その他の 動作はオリジナルに委譲する方法を紹介します。

   1  require_dependency 'models/foo'
   2  
   3  class Foo
   4    def bar
   5      puts 'baz'
   6    end
   7  end

上記のように、require_dependencyを使ってapp ディレクトリ以下のファイルを参照することで、Fooクラスのbar メソッドの挙動だけを置き換えることができるようになります。

posted by Png genki on Fri 1 Feb 2008 at 12:16

UnitTestやFunctionalTestの中から参照するファイルをどこに置くべきか という疑問について、明確な回答を用意できていなかったのですが、 Railsのソースの中で答えらしきものを見つけたので紹介します。

actionpack/lib/action_controller/test_process.rb L325

   1    # Usage example, within a functional test:
   2    #   post :change_avatar, :avatar => ActionController::TestUploadedFile.new(Test::Unit::TestCase.fixture_path + '/files/spongebob.png', 'image/png')

このExampleによると、test/fixtures/filesというディレクトリを作り、 その中にファイルを置いているようです。

posted by Png genki on Fri 1 Feb 2008 at 00:33
Contents
Mockで既存のクラス・モジュールを上書きする方法
Testで使うファイルをどこに置くべきか
Comments
瀧内元気: MacOS版は以下にあります * [genki/ViMouse](https://githu... '23-1
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ