كيف تسخر من المعلمات عند اختبار أداة ضبط نموذج ريلز؟
-
01-07-2019 - |
سؤال
نظرا للكود من النموذج المعقد الجزء الثالث كيف يمكنك إجراء اختبار السمة الافتراضية؟
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 الخاصة بك.