2008-11-05 21 views
5

Bazı kısmi parçacıklar içeren bir Rails eklentisi yazıyorum. Kısmi test etmek isterdim, ama bunları yapacak bir test yapmakta zorlanıyorum. Hiçbir ilişkili kontrolör, bu yüzden sadece bir tane numara olduğunu:Rails eklentisindeki görünümleri nasıl test edebilirim?

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 

Ama bu :render çağrı hep havaya uçuruyor. ActionController::Base yerine bir ActionView::Base kullanmayı denedim, ancak bu daha da az uzak olur.

Hiç kimse herhangi bir başarı elde etti mi?

cevap

1

son cevap:

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

çıkış ActionView :: TestCase - http://api.rubyonrails.org/classes/ActionView/TestCase.html

Ayrıca son derece yararlı buldum yardımcıları, test etmek için bu kullanabilirsiniz. http://rspec.info/documentation/rails/writing/views.html

Umut yardımcı olur:

RSpec da görüşlerini test etmek için bir yol var!

+0

Nothin 'yapıyor. Nil'deki yöntemleri çağırmaya çalışırken her türlü hataları alıyorum. Daha fazla kurulum yapılması gerekiyormuş gibi. ActionController :: TestCase kullanımı bunu daha iyi yapmaz. –

0

ben ele verdik en yakın

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 

olduğu Ama şimdi bir yönlendirme hatası alıyorum: ActionController::RoutingError: No route matches {:action=>"_renderizer", :controller=>"", :args=>{:locals=>{:...}, :partial=>"/my_partial"}}

0

denemenizi öneriyor için kod bakmak resource_controller plugin. Bir kaç diğer eklentide de yaklaşımı gördüm.

Yanıt, basittir, sınama dizininizde, eklentinizi kullanan bir uygulama oluşturursunuz. Oradan, Rails görüntülerini test etmek için sadece ortak araçları kullanırsınız.

Eklentiniz için farklı kullanım durumları yoksa test uygulaması son derece basit olabilir. Resource_controller gibi daha karmaşık eklentiler durumunda, muhtemelen birkaç farklı kontrol cihazı ve benzeri oluşturmak zorunda kalacaksınız.

Test uygulamanızı eklentinizi yüklemek için kandırmak için, en basit yol, test uygulamasının eklenti dizinindeki r_c dizininin köküne bir bağlantı oluşturmaktır. Bu Windows üzerinde çalışmayacak, sadece POSIX OS'ler.

İlgili konular