5

私はいくつかのパーシャルを含むRailsプラグインを書いています。パーシャルをテストしたいのですが、パーシャルをレンダリングするテストを設定するのに苦労しています。関連するコントローラーがないので、私はただ1つを偽造しています:

require 'action_controller'
require 'active_support'
require 'action_pack'
require 'action_view'

class MyTest < Test::Unit::TestCase
  def setup
    @renderer = ActionController::Base.new
    @renderer.append_view_path File.expand_path(File.join(File.dirname(__FILE__), '..', 'views'))
  end

  def test_renders_link
    result = @renderer.render(:partial => '/something')
    assert ...
  end
end

しかし、その:render呼び出しは常に爆発します。ActionView::Baseの代わりにを使用してみましたActionController::Baseが、それはさらに遠くなりません。

誰かが成功しましたか?

4

4 に答える 4

2

Checkout ActionView::TestCase - http://api.rubyonrails.org/classes/ActionView/TestCase.html

これらを使用してヘルパーをテストすることもできます。これは非常に役立ちます。

RSpec には、ビューをテストする方法もあります: http://rspec.info/documentation/rails/writing/views.html

それが役立つことを願っています!

于 2008-11-05T21:55:51.050 に答える
1

最終的な答え:

require 'action_controller'
require 'active_support'
require 'action_pack'
require 'action_view'
require 'action_controller/test_case'

class StubController < ActionController::Base
  helper MyHelper
  append_view_path '...'
  attr_accessor :thing
  def my_partial
    render :partial => '/my_partial', :locals => { :thing => thing }
  end
  def rescue_action(e) raise e end;
end

class MyTestCase < ActionController::TestCase
  self.controller_class = StubController
  def setup
    @controller.thing = ...
    get :my_partial
    assert ...
  end
end
于 2008-11-05T23:21:51.250 に答える
0

私が得た最も近いのは

require 'action_controller'
require 'active_support'
require 'action_pack'
require 'action_view'
require 'action_controller/test_case'

class StubController < ActionController::Base
  append_view_path '...'
  def _renderizer;  render params[:args];  end
  def rescue_action(e) raise e end;
end

class MyTest < ActionController::TestCase
  self.controller_class = StubController
  def render(args);  get :_renderizer, :args => args;  end 
  def test_xxx
    render :partial => ...
  end
end

しかし、ルーティングエラーが発生しました:ActionController::RoutingError: No route matches {:action=>"_renderizer", :controller=>"", :args=>{:locals=>{:...}, :partial=>"/my_partial"}}

于 2008-11-05T22:57:41.877 に答える
0

resource_controller pluginのコードを確認することをお勧めします。他のいくつかのプラグインでもこのアプローチを見てきました。

答えは簡単です。テストディレクトリで、プラグインを使用するアプリを作成します。そこから、一般的なツールを使用して Rails ビューをテストするだけです。

プラグインのさまざまなユースケースがあまりない場合、テストアプリは非常にシンプルになる可能性があります。resource_controller などのより複雑なプラグインの場合は、おそらくかなりの数の異なるコントローラーなどを作成する必要があります。

テスト アプリにプラグインをロードさせる最も簡単な方法は、テスト アプリのプラグイン ディレクトリ内の r_c ディレクトリのルートへのリンクを作成することです。これは Windows では動作せず、POSIX OS のみで動作します。

于 2008-11-06T02:35:32.203 に答える