روبي على القضبان التجارب الفنية مع البرنامج المساعد مصادقة مريحة

StackOverflow https://stackoverflow.com/questions/867231

سؤال

ولقد بدأت في كتابة الاختبارات الوظيفية للسكك بلدي التطبيق اليوم. يمكنني استخدام البرنامج المساعد المصادقة مريحة. جريت إلى بضع مربكة الأشياء آمل شخص يمكن توضيح بالنسبة لي.

1) لقد كتبت وظيفة تسجيل الدخول سريعة لأن معظم الوظائف في بلدي القضبان التطبيق تتطلب المصادقة.

def login_as(user)
   @request.session[:user_id] = user ? user.id : nil
end

وهذه المسألة أرى مع هذه الوظيفة، هل هو في الأساس مزيفة المصادقة. يجب أن أكون قلقا حول هذا الموضوع؟ ربما كان على ما يرام إلى السير في هذا الطريق طالما أنا اختبار أسلوب المصادقة صحيح في مكان ما. أو ربما هذا هو الممارسة الفظيعة.

2) فان الخلط بين الشيء الثاني هو أنه في بعض الأماكن في الاختبارات الوظيفية بلدي، أنا في حاجة إلى عملية المصادقة الكاملة أن يحدث. عند تنشيط مستخدم، لدي طريقة do_activate خلق بعض الكائنات الأولية للمستخدم. ومن مماثلة لخلق كائن دفتر فارغ والهدف من ركلة جزاء لتطبيق الطلاب، وإذا كان هذا الأمر يبدو معقولا تماما.

وذلك من أجل اختبار طلبي بشكل صحيح، ولست بحاجة للمستخدم لضرب تلك الدولة تفعيل حتى يتم إنشاء هذه الكائنات. أنا حاليا باستخدام مصنع فتاة لإنشاء المستخدم، ومن ثم استدعاء login_as تعمل فوق إلى مصادقة وهمية.

وأعتقد أن خيار آخر يتمثل في تخطي تسلسل التوثيق الكامل ومجرد إنشاء كائنات فارغة مع مصنع فتاة. أنا يمكن اختبار المصادقة المناسبة في مكان آخر.

ما رأيك؟ إذا كان ينبغي أن تذهب من خلال التسلسل الصحيح، لماذا ليس رمز أدناه استدعاء وظيفة do_activate؟

user = Factory.create(:user)
user.active = 1
user.save

وشكرا لك!

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

المحلول

وتزوير كان مقبولا تماما.

ولكن، كتابة الاختبارات الأخرى التي تضمن أن الأشياء التي تريد حمايتها محمية. لذلك

test "it should show the profile page" do
  user = Factory(:user)
  login_as(user)
  get :show, :id => user
  assert_response :success
end

test "it should not show the profile page cos I'm not logged in" do
  user = Factory(:user)
  get :show, :id => user
  assert_response :redirect
end

لا تتردد في ضرب لي عن المتابعات!

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