كيف يمكنني اختبار طرق العرض في مكون 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/ وثائق / القضبان / الكتابة / 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"}}
أقترح عليك إلقاء نظرة على رمز البرنامج المساعد Resources_controller.لقد رأيت أيضًا هذا النهج في عدد قليل من المكونات الإضافية الأخرى.
الجواب بسيط، في امتحان الدليل، يمكنك إنشاء تطبيق يستخدم البرنامج المساعد الخاص بك.من هناك، يمكنك ببساطة استخدام الأدوات الشائعة لاختبار طرق عرض Rails.
يمكن أن يكون تطبيق الاختبار بسيطًا للغاية إذا لم يكن هناك العديد من حالات الاستخدام المختلفة للمكون الإضافي الخاص بك.في حالة المكونات الإضافية الأكثر تعقيدًا، مثل Resources_controller، فمن المحتمل أن يتعين عليك إنشاء عدد لا بأس به من وحدات التحكم المختلفة وما إلى ذلك.
لخداع تطبيق الاختبار الخاص بك لتحميل المكون الإضافي الخاص بك، فإن أبسط طريقة هي إنشاء رابط إلى جذر دليل r_c داخل دليل البرنامج الإضافي لتطبيق الاختبار.لن يعمل هذا على نظام التشغيل Windows، بل على أنظمة تشغيل POSIX فقط.