القضبان ينتمي إلى الاختبار
-
23-09-2019 - |
سؤال
لدي نموذج اقتراح ينتمي إلى المشروع:
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 وسيقوم بإنشائها لوحدات التحكم الخاصة بك وفقًا لذلك.