سؤال

لدي نموذج اقتراح ينتمي إلى المشروع:

class Proposal < ActiveRecord::Base
  belongs_to :project
  has_many :articles, :as => :document, :dependent => :destroy
  has_many :sections, :through => :articles

  # proposal has project - test/unit/proposal_test.rb
  validates_presence_of :project_id
end

الطريق الذي قمت بإعداده لإظهار هذا السجل هو "http: //domain.tld/projects/project-id/proposal"، من خلال هذا السطر في ROUTES.RB -" Map.Resources: Projects ،: has_one =>: Proposal "

الآن أريد اختبار هذا من خلال Proposals_Controller_test.rb.

  test "should show proposal" do
    get :show, :id => proposals(:one).to_param
    assert_response :success
  end

ومع ذلك ، يستمر "اختبار أشعل النار" في إخباري ، وليس لدي أي فكرة عن كيفية إصلاحه. ربما يكون من السهل حقًا عليك يا رفاق ، لكن جديدًا بالنسبة لي.

  1) Error:
test_should_show_proposal(ProposalsControllerTest):
ActiveRecord::RecordNotFound: Couldn't find Project without an ID
    app/controllers/proposals_controller.rb:18:in `show'
    /test/functional/proposals_controller_test.rb:34:in `test_should_show_proposal'

هنا هو منطق عرض وحدة التحكم الخاصة بي:

  # should show proposal - test/functional/proposals_controller_test.rb
  def show
    @project = Project.find(params[:project_id])
    @proposal = @project.proposal

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @proposal }
    end
  end

عائدات سريعة إلى "نص/وحدة تحكم":

Loading development environment (Rails 2.3.4)
>> t = Project.first
=> #<Project id: 1, name: "Test">
>> t.proposal
=> #<Proposal id: 2, active: true, project_id: 1>

في حين يظهر "اختبار السيناريو/وحدة التحكم":

Loading test environment (Rails 2.3.4)
>> t = Project.first
=> #<Project id: 298486374, name: "Test">
>> t.proposal
=> nil

ما الأمر مع هذا المعرف الغريب؟!؟! الرجاء مساعدتي في ربط الجمعيات في اختبار ENV!

هل كانت مفيدة؟

المحلول

هذا هو الخطأ.

الجمعيات التلقائية في تركيبات Ruby on Rails

http://ar.rubyonrails.org/classes/fixtures.html

  • راجع القسم الخاص بـ "مراجع الملصقات للجمعيات (insers_to ، has_one ، has_many)"

هنا آخر شرح اختياري...


في الأساس ، يجب عليك القرد مع التركيبات الخاصة بك وإزالة _ID من المفاتيح الأجنبية للحصول على جمعيات تعمل (بشكل غريب بما فيه الكفاية). تشرح المقالات كل شيء. بعد أن أقوم بـ RTFM ، يبدأ كل شيء في العمل بشكل مثالي. فقط بحاجة إلى معرفة مكان النظر. لا تنسى "Rake DB: Test: Prepared" & "Rake Test" أولاً!

نصائح أخرى

أولاً ، لاحظت أن وحدة التحكم الخاصة بك تستخدم Param 'Project_id' وأن الاختبار الخاص بك يمرر معلمة من "ID". لذا ، ستبحث مكالمة البحث عن "NIL" في وحدة التحكم والتي من المحتمل أن تتسبب في الخطأ في رؤيتك.

Params هو مجرد تجزئة ، ويمكنك بالفعل تمرير تجزئة Params في مكالمة العرض الخاصة بك. إذا كنت تريد أن تكون هناك قيمة لحقل "Project_id" ، فيمكنك إضافة ذلك بسهولة. فمثلا:

get :show, { :project_id => proposals(:one).project_id }

جرب شيئًا على هذا الخطوط ويجب أن تكون قادرًا على الحصول على مشروع التشغيل المناسب إلى وحدة التحكم. يجب أن تعرف القضبان أن التجزئة التي يتم تمريرها في النهاية هي تجزئة Params وسيقوم بإنشائها لوحدات التحكم الخاصة بك وفقًا لذلك.

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