我正在编写一个包含一些部分内容的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
电话总是爆炸。我尝试使用ActionView::Base
而不是ActionController::Base
,但这种情况的影响甚至更小。
有没有人取得任何成功?
答案 0 :(得分:2)
结帐ActionView :: TestCase - http://api.rubyonrails.org/classes/ActionView/TestCase.html
您也可以使用它们来测试助手,我发现这些助手非常有帮助。
RSpec还有一种测试视图的方法:http://rspec.info/documentation/rails/writing/views.html
希望有所帮助!
答案 1 :(得分: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
答案 2 :(得分: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"}}
答案 3 :(得分:0)
我建议您查看resource_controller plugin的代码。我也在其他一些插件中看到了这种方法。
答案很简单,在测试目录中,您创建了一个使用您的插件的应用。从那里,您只需使用常用工具来测试Rails视图。
如果您的插件没有很多不同的用例,测试应用程序可以非常简单。在更复杂的插件(如resource_controller)的情况下,您可能需要创建相当多的不同控制器等等。
要欺骗您的测试应用加载插件,最简单的方法是在测试应用的插件目录中创建指向r_c目录根目录的链接。这不适用于Windows,只适用于POSIX操作系统。