문제

저는 일부 부분을 포함하는 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에서만 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top