سؤال

أنا أكتب مكونًا إضافيًا لـ 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 فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top