سؤال

نظرا للكود من النموذج المعقد الجزء الثالث كيف يمكنك إجراء اختبار السمة الافتراضية؟

  def new_task_attributes=(task_attributes)
    task_attributes.each do |attributes|
      tasks.build(attributes)
    end
  end

أحاول حاليًا اختباره مثل هذا:

  def test_adding_task_to_project
    p = Project.new
    params = {"new_tasks_attributes" => [{ "name" => "paint fence"}]}
    p.new_tasks_attributes=(params)
    p.save
    assert p.tasks.length == 1
  end

لكني أتلقى الخطأ التالي:

خطأ NoMethod:طريقة غير محددة `stringify_keys!" لـ "new_tasks_attributes": سلسلة

أي اقتراحات بشأن تحسين هذا الاختبار سيكون موضع تقدير كبير.

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

المحلول

يبدو كما لو أن new_task_attributes= تتوقع مصفوفة من التجزئة، ولكنك تمررها.جرب هذا:

def test_adding_task_to_project
  p = Project.new
  new_tasks_attributes = [{ "name" => "paint fence"}]
  p.new_tasks_attributes = (new_tasks_attributes)
  p.save
  assert p.tasks.length == 1
end

نصائح أخرى

هل يمكننا رؤية تتبع المكدس بأكمله؟أين تعتقد String#stringify_keys!يتم استدعاؤه؟

كما أن المعلمات تبدو غريبة بالنسبة لي.هل تتوقع المهام.build() إدخالًا مثل هذا: ["new_tasks_attribute", {"name" => "paint fence"}] ?

إذا لم يكن الأمر كذلك، فربما تريد بالفعل Hash#each_key() بدلاً من Hash#each()؟

بحاجة الى مزيد من البيانات.أيضًا، قد تفكر في استخدام علامة Ruby لمرافقة علامة Rails الخاصة بك.

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