5

我正在编写一个包含一些部分的 Rails 插件。我想测试部分,但我很难设置一个可以渲染它们的测试。没有关联的控制器,所以我只是假装一个:

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电话总是会爆炸。我尝试过使用 anActionView::Base而不是 an ActionController::Base,但效果更差。

有没有人成功过?

4

4 回答 4

2

结帐 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 插件的代码。我还在其他一些插件中看到了这种方法。

答案很简单,在test目录中,您创建一个使用您的插件的应用程序。从那里,您只需使用常用工具来测试 Rails 视图。

如果您的插件没有很多不同的用例,则测试应用程序可以非常简单。对于更复杂的插件,例如 resource_controller,您可能需要创建很多不同的控制器等等。

要欺骗您的测试应用程序加载您的插件,最简单的方法是在测试应用程序的插件目录中创建一个指向 r_c 目录根目录的链接。这不适用于 Windows,仅适用于 POSIX 操作系统。

于 2008-11-06T02:35:32.203 回答