Rails 플러그인에서 뷰를 어떻게 테스트할 수 있나요?
-
06-07-2019 - |
문제
저는 일부 부분을 포함하는 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
, 그러나 그것은 훨씬 덜 멀어집니다.
누구든지 성공했습니까?
해결책 2
최종 답변:
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
다른 팁
ActionView::TestCase 체크아웃 - http://api.rubyonrails.org/classes/ActionView/TestCase.html
또한 이를 사용하여 도우미를 테스트할 수 있는데 이는 매우 유용하다고 생각합니다.
RSpec에는 뷰를 테스트하는 방법도 있습니다. http://rspec.info/documentation/rails/writing/views.html
도움이 되었기를 바랍니다!
내가 얻은 가장 가까운 것은
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"}}
코드를 살펴보는 것이 좋습니다. Resource_controller 플러그인.나는 또한 몇 가지 다른 플러그인에서도 접근 방식을 보았습니다.
대답은 간단합니다. 시험 디렉터리에서 플러그인을 사용하는 앱을 만듭니다.여기에서 일반 도구를 사용하여 Rails 뷰를 테스트하면 됩니다.
플러그인에 대한 다양한 사용 사례가 없다면 테스트 앱은 매우 간단할 수 있습니다.Resource_controller와 같은 더 복잡한 플러그인의 경우 아마도 꽤 많은 컨트롤러 등을 만들어야 할 것입니다.
테스트 앱이 플러그인을 로드하도록 속이는 가장 간단한 방법은 테스트 앱의 플러그인 디렉터리 내에 r_c 디렉터리 루트에 대한 링크를 만드는 것입니다.이것은 Windows에서는 작동하지 않으며 POSIX OS에서만 작동합니다.