لا تعمل السخرية مع RSPEC وترسم
-
26-09-2019 - |
سؤال
أنا أعمل على تطبيق 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