2008-11-05 28 views
5

Tôi đang viết một plugin Rails bao gồm một số partials. Tôi muốn thử nghiệm partials, nhưng tôi đang gặp khó khăn trong việc thiết lập một bài kiểm tra sẽ hiển thị chúng. Không có bộ điều khiển liên quan, vì vậy tôi chỉ giả mạo một bộ điều khiển:Làm cách nào để kiểm tra chế độ xem trong plugin 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 

Nhưng cuộc gọi đó luôn luôn thổi lên. Tôi đã thử sử dụng một ActionView::Base thay vì một số ActionController::Base, nhưng điều đó thậm chí còn kém xa.

Có ai đã thành công không?

Trả lời

1

Câu trả lời cuối cùng:

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

thanh toán ActionView :: TestCase - http://api.rubyonrails.org/classes/ActionView/TestCase.html

Bạn cũng có thể sử dụng chúng để kiểm tra những người giúp đỡ, mà tôi đã tìm thấy rất hữu ích.

RSpec cũng có một cách để kiểm tra xem: http://rspec.info/documentation/rails/writing/views.html

Hy vọng rằng sẽ giúp!

+0

Nothin đang thực hiện. Tôi nhận được tất cả các loại lỗi cố gắng gọi các phương thức trên nil. Nó giống như thiết lập nhiều hơn cần phải được thực hiện. Sử dụng ActionController :: TestCase không làm cho nó tốt hơn. –

0

Gần nhất tôi đã nhận được là

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 

Nhưng tôi nhận được một lỗi định tuyến tại: ActionController::RoutingError: No route matches {:action=>"_renderizer", :controller=>"", :args=>{:locals=>{:...}, :partial=>"/my_partial"}}

0

tôi đề nghị bạn nhìn vào mã cho resource_controller plugin. Tôi cũng đã thấy cách tiếp cận trong một vài plugin khác.

Câu trả lời rất đơn giản, trong thư mục kiểm tra, bạn tạo ứng dụng sử dụng plugin của mình. Từ đó, bạn chỉ cần sử dụng các công cụ phổ biến để kiểm tra các khung nhìn Rails.

Ứng dụng thử nghiệm có thể vô cùng đơn giản nếu không có nhiều trường hợp sử dụng khác nhau cho plugin của bạn. Trong trường hợp các plugin phức tạp hơn, như resource_controller, có thể bạn sẽ phải tạo ra khá nhiều bộ điều khiển khác nhau, v.v.

Để lừa ứng dụng thử nghiệm của bạn tải plugin của bạn, cách đơn giản nhất là tạo liên kết tới thư mục gốc của thư mục r_c bên trong thư mục plugin của ứng dụng thử nghiệm. Điều này sẽ không hoạt động trên Windows, chỉ có các hệ điều hành POSIX.

Các vấn đề liên quan