RSPEC الوصول إلى أساليب Application_Controller مثل "Current_user"

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

سؤال

أحاول التخلص من طريقة على 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 الخاص بك ، فيمكنك استخدام هذا:

  1. أولاً ، قم بإنشاء كائن مستخدم داخل اختبار RSPEC. على سبيل المثال: (استخدم أي سمات تحتاجها أو مطلوبة لإنشاء كائن المستخدم.)

    user = user.create (الاسم: "TED")

    (ملاحظة: يمكنك أيضًا استخدام مصنع من Factorygirl.)

  2. الآن ، مع كائن المستخدم الذي يتم حفظه في "المستخدم" المتغير ، قم بذلك ضمن نفس اختبار RSPEC:

    controller.stub! (: Current_user) .and_return (المستخدم)

التي يجب أن تعمل...

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