RSPEC الوصول إلى أساليب Application_Controller مثل "Current_user"
-
03-10-2019 - |
سؤال
أحاول التخلص من طريقة على Current_user (باستخدام حل مصادقة Restful_authentication المعدل) مع RSPEC. لست متأكدًا تمامًا من كيفية الوصول إلى هذه الطريقة في مواصفات وحدة التحكم الخاصة بي. Current_user في حد ذاته لا يعمل. هل أحتاج إلى الحصول على وحدة التحكم نفسها أولاً؟ كيف أقوم بهذا العمل؟
استخدام rails 2.3.5
, rspec 1.3.0
و rspec-rails 1.3.2
# my_controller_spec.rb
require 'spec_helper'
describe MyController do
let(:foos){ # some array of foos }
it "fetches foos of current user" do
current_user.should_receive(:foos).and_return(foos)
get :show
end
end
ينتج عنه
NoMethodError in 'ChallengesController fetches foos of current user'
undefined method `current_user' for #<Spec::Rails::Example::ControllerExampleGroup::Subclass_1::Subclass_1::Subclass_2::Subclass_2:0x7194b2f4>
المحلول
يمنحك RSPEC-rails controller
طريقة للاستخدام في أمثلة وحدة التحكم. لذا:
controller.stub!(:current_user).with(:foos).and_return(foos)
يجب أن تعمل.
نصائح أخرى
كيف يمكن أن تعرف مكان العثور عليها current_user
؟ هذا يجب أن يحلها:
subject.current_user.should_receive(:foos).and_return(foos)
أنا لست على دراية تمامًا بـ Restful_authentication ، فقط Authlogic و Distise ، ولكن من المحتمل أن يكون مشابهًا في ذلك current_user
هي طريقة وحدة تحكم وليس كائن ، وهذا هو السبب should_receive
على أنه لا يعمل كما هو متوقع (أنت تضع توقعًا على الكائن current_user
عائدات, ، لكن الطريقة لا يمكن الوصول إليها داخل نطاق توقعاتك).
جرب هذا:
stub!(:current_user).and_return(foos)
قرأت هذا وتعديل لي قليلا. إذا كنت ترغب ببساطة في تمرير كائن مستخدم في اختبار RSPEC الخاص بك ، فيمكنك استخدام هذا:
أولاً ، قم بإنشاء كائن مستخدم داخل اختبار RSPEC. على سبيل المثال: (استخدم أي سمات تحتاجها أو مطلوبة لإنشاء كائن المستخدم.)
user = user.create (الاسم: "TED")
(ملاحظة: يمكنك أيضًا استخدام مصنع من Factorygirl.)
الآن ، مع كائن المستخدم الذي يتم حفظه في "المستخدم" المتغير ، قم بذلك ضمن نفس اختبار RSPEC:
controller.stub! (: Current_user) .and_return (المستخدم)
التي يجب أن تعمل...