كيف أقوم بتزييف تسجيل الدخول إلى OpenID في قصة مستخدم RSpec/Cucumber عند استخدام البرنامج المساعد open_id_authentication
-
23-08-2019 - |
سؤال
أحاول كتابة سيناريو الخيار الذي يتطلب مني أن يكون لدي مستخدم مسجل الدخول - والذي عادةً ما يكون بسيطًا جدًا ولكني أستخدم فقط مصادقة 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
شكرا