كيف أقوم بتزييف تسجيل الدخول إلى OpenID في قصة مستخدم RSpec/Cucumber عند استخدام البرنامج المساعد open_id_authentication

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

سؤال

أحاول كتابة سيناريو الخيار الذي يتطلب مني أن يكون لدي مستخدم مسجل الدخول - والذي عادةً ما يكون بسيطًا جدًا ولكني أستخدم فقط مصادقة OpenID (متقن للمكون الإضافي للمصادقة).ولكن بعد البحث في المكونات الإضافية open_id_authentication، لست متأكدًا من كيفية تحقيق ذلك داخل Cucumber.

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

المحلول

لقد اكتشفت طريقة، إذا وضعت هذا في ميزاتك / الدعم / Env.rb:

ActionController::Base.class_eval do
  private

  def begin_open_id_authentication(identity_url, options = {})
    yield OpenIdAuthentication::Result.new(:successful), identity_url, nil
  end 
end

ثم يمكنك فقط فعل شيء مثل هذا في الخطوة المناسبة:

Given /^I am logged in as "(.*)"$/ do |name|
  user = User.find_by_name(user)
  post '/session', :openid_url => user.identity_url
  # Some assertions just to make sure our hack in env.rb is still working
  response.should redirect_to('/')
  flash[:notice].should eql('Logged in successfully')
end

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

نصائح أخرى

إذا كنت تريد أن تكون قادرًا على استبعاد الردود، فافعل هذا:

في الميزات/الدعم/helpers.rb:

ActionController::Base.class_eval do

  private
    def fake_openid_response(identity_url)
      [OpenIdAuthentication::Result.new(:successful), identity_url, nil]
    end

    def begin_open_id_authentication(identity_url, options = {})
        yield fake_openid_response(identity_url)
    end 
end

من خلال نقل الاستجابة إلى طريقة منفصلة، ​​يمكنك الآن إيقاف الاستجابة في خطواتك إذا لزم الأمر.على سبيل المثال، إذا أردت استجابة مفقودة وكان لدي وحدة تحكم GoogleLoginController، فيمكنني القيام بما يلي باستخدام Mocha:

GoogleLoginController.any_instance.stubs(:fake_openid_response)
    .returns([OpenIdAuthentication::Result.new(:missing), identity_url, nil])

بورت, ، يحتوي تطبيق هيكل عظمي على القضبان، مجموعة كاملة من اختبارات RSPEC ودعم تسجيل الدخول OpenID حتى ترغب في إلقاء نظرة وشاهد ما يفعلونه.

أعمال الهيافة تعمل إلا أنني بحاجة إلى تطبيع overity_url مثل:

ActionController::Base.class_eval do

    private

        def begin_open_id_authentication(identity_url, options = {})
            yield OpenIdAuthentication::Result.new(:successful), self.normalize_identifier(identity_url), nil
        end 
end

شكرا

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