سؤال

أنا أعمل على تطبيق Web Rails 3 في الوقت الحالي مع RSPEC 2 ونستخدم ابتكار المصادقة. يتطلب واحدة من وحدات التحكم (وقريباً) من وحدات التحكم الخاصة بنا تسجيل الدخول. أعرف أن الربط يوفر sign_in المساعد اختبار ، ولكن هل يمكن استخدامه باستخدام كائن وهمية RSPEC أو Mocha؟

لقد حاولت في الأصل @user = mock_model(User) حيث المستخدم هو فئة الربط. هذا لن يعمل مع sign_in :user, @user مثل get 'index' سوف إعادة توجيه إلى نموذج في النموذج.

هل لدى أي شخص أي خبرة في الاختبار مع ابتكار ويمكنه المساعدة؟

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

المحلول

كان لدينا مشكلة مماثلة ، ولكن باستخدام فتاة المصنع. قمنا بحلها مثل:

في spec_helper.rb:

config.include Devise::TestHelpers, :type => :controller

في مواصفات وحدة التحكم (مجرد طريقة غلاف):

def login_user(user)
    sign_in user
end

ثم في كل طريقة تحتاجها ، يمكنك القيام بذلك:

login_user(Factory(:user))

... حيث حددت كائن مستخدم في المصانع. لست متأكدًا مما إذا كان هذا سيعمل مع Mocks رغم ذلك.

نصائح أخرى

وهمية لن تعمل أبدًا. عندما تقول تسجيل الدخول ، يتم تخزين المستخدم في الجلسة (بشكل أساسي ، فئة المستخدم ومعرفه). عند الوصول إلى وحدة التحكم ، يتم استرداد كائن مستخدم آخر بناءً على البيانات المخزنة. أفضل طريقة لحل المشكلة هي استخدام شيء يستمر في الكائن ، مثل Girl Factory.

لقد ضربت نفس القضية. أفعل ما يلي الآن:

before(:each) do
  # sign_in mock_user
  request.env['warden'] = mock(Warden, :authenticate => mock_user,
                                       :authenticate! => mock_user)
end

لقد قمت بإنشاء مشكلة لهذا هنا: https://github.com/plataformatec/devise/issues#issue/928اذهب للتصويت!

لم يعمل لي أي منهم (التصوير بالرنين المغناطيسي 1.9.3-preview1 ، Rails 3.0.1.RC5).

هذا هو الحل الذي وجدته: http://blog.joshmcarthur.com/post/6407481655/integration-tests-with-devise-and-rspec

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