سؤال

أحاول كتابة بعض اختبارات الخيار لتطبيقي يستخدم Authlogic للمصادقة، ولكن في الواقع يخزن المستخدمين في خادم LDAP.

يبدو أن التطبيق يعمل بشكل جيد، ولكن حيث أقوم بتشغيل مشكلة في كتابة الاختبارات الخاصة به (وأنا أعلم، وأنا أعلم، يجب أن كتبت الاختبارات أولا.) من السهل الحصول على قاعدة بيانات اختبار حيث يتم تطهير البيانات بعد كل تشغيل، ولكن ليس من السهل جدا مع خادم LDAP.

كانت فكرتي تكتب مهمة أشعل النار (مثل أشعل النار LDAP: اختبار: الاستعداد) لتحديث خادم LDAP قبل كل تشغيل (أو جعله تبعية)، ولكن يبدو ذلك وقتا ممتعا عندما أعمل على الاختبارات (وتجعل غير ممكن.)

هل هناك طريقة أفضل للقيام بذلك؟ هل هناك خادم LDAP وهمية في الروبي يمكنني ربطه به مع تركيبات محددة مسبقا؟ هل هناك بعض الحل الآخرين أكثر أناقة وأنا لا أفكر في؟ (لا تستخدم LDAP ليس خيارا.)

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

المحلول

لذلك في اختبارات الخيار العامة هي اختبار التكامل والقبول. هذا هو الحال من المفترض أن يختبر نهاية النظام إلى النهاية، لذلك يجب اختبار تكامل LDAP أيضا. اقتراحي، إذا كنت تستطيع التأرجح، فستكون لإعداد خادم LDAP آخر وقم بإجراء تفريغ دوري من Live One لإعداده مع أي بيانات اختبار تحتاجها.

سأقول رغم أن فكرتك الأولى عن امتلاك الاعتماد الذي ينعش LDAP DB قبل كل تشغيل هو الطريقة "الصحيحة" للقيام بذلك. اختبار التكامل / القبول هو مفترض لقضاء وقت طويل. يختبر مجمل وظيفة النظام، وليس فقط قطع صغيرة (وحدة).

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

الآن هذا هو التحيز الشخصي الخاص بي، ولكن إذا لم يكن لديك أي اختبارات لوحدة في مكانها، فسوف ألقي نظرة على RSPEC. إذا كنت ترغب في بناء جملة الخيار باللغة الإنجليزية، فستشعر RSPEC بالتأكيد بشعور مماثل. إذا كنت قد تم اختبارها بالفعل في الاختبار :: الوحدة، فستشير بالتأكيد إلى إحضارها إلى الحفلة أو ربما السياق / التطابق (جميعها المتاحة على Github) للحصول على شعور RSPEC في إطار الاختبار :: Framework.

نصائح أخرى

استمتع باستخدام مغسل كخادم اختبار LDAP

https://github.com/nubic/ladle.

أخيرا قادرا على التنظيف بشكل أساسي بتنظيف خادم LDAP قبل تشغيل كل سيناريو الخيار. فعلت هذا عن طريق إضافة خطاف في الخيار

Before do |scenario|
  puts "Cleaning Up LDAP Server"
  LdapConnect.new(:admin => true).clear_users!
end

ثم فئة LDAPConnect الخاصة بي (نظرا لأن النماذج المتعددة قد تحتاج إلى لمس خادم LDAP، يمكنني فقط المرور حول هذا الكائن). أنا أستخدم جوهرة Ruby-Net-LDAP لتفاعل LDAP

class LdapConnect

  def initialize(params = {})
    ldap_config = YAML.load_file("#{RAILS_ROOT}/config/ldap.yml")[RAILS_ENV]
    ldap_options = params.merge({:encryption => :simple_tls})

    @ldap = Net::LDAP.new(ldap_options)
    @ldap.host = ldap_config["host"]
    @ldap.port = ldap_config["port"]
    @ldap.base = ldap_config["base"]
    @ldap.auth ldap_config["admin_user"], ldap_config["admin_password"] if params[:admin] 
  end

  def ldap
    @ldap
  end

  def clear_users!(base = "ou=people,dc=test,dc=com")
    raise "You should ONLY do this on the test enviornment! It will clear out all of the users in the LDAP server" if RAILS_ENV != "test"
    if @ldap.bind
      @ldap.search(:filter => "cn=*", :base => base) do |entry|
        @ldap.delete(:dn => entry.dn)
      end
    end
  end

end

لذلك، تبدو ميزة الخيار الخاصة بي شيء مثل:

Feature: Check to make sure users can login
  In order to make sure users can login with the LDAP server
  As a user
  I want to make sure the user can login

  Background:
    Given I have the following users
    | email | password | user_class | first_name | last_name |
    | external@test.com | right_password | externalPerson | external | person |
    | internal@test.com | right_password | internalPerson | internal | person |
    | admin@test.com | right_password | adminPerson | admin | person |

  Scenario: Success Login Check
    Given I am logged in as "external@test.com" with password "right_password"
    Then I should be on the homepage

وأخيرا الخطوات

Given /^I have the following users$/ do |table|
  # table is a Cucumber::Ast::Table
  table.hashes.each do |hash|
    hash[:password_confirmation] == hash[:password] unless hash[:password_confirmation]
    User.create(hash)
  end
end

Given /^I am logged in as "([^\"]*)" with password "([^\"]*)"$/ do |email, password|
  visit login_url  
  fill_in "Email", :with => email  
  fill_in "Password", :with => password  
  click_button "Login" 
end

لقد كنت أتطلع إلى هذا بنفسي، واتبرت عبر جوهرة Fakeldap fakeldap بدلا من الرادار.

http://github.com/aanand/fakeldap.http://rubygems.org/gems/fakeldap.

قد أضيف إلى هذه الإجابة مع بعض الخبرة بعد استخدامها.

ليس حقا إجابة ولكن ... أنا أعمل في مشكلة مماثلة للغاية، واختبار مصادقة LDAP ورمز البحث مع الخيار. هل نظرت إلى استخدام كعب في الاختبار الخاص بك؟ كنت أفكر في Stubbing ردود LDAP الخاصة بي ... لم أحسب فقط كيف أفعل ذلك بعد.

غير لامع

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