4

認証に Authlogic を使用するアプリケーション用のいくつかのキュウリ テストを作成しようとしていますが、実際にはユーザーを LDAP サーバーに保存します。

アプリケーションは問題なく動作しているように見えますが、問題が発生しているのはテストを作成することです (わかっています、わかっています。最初にテストを作成する必要がありました)。それぞれが実行されますが、LDAP サーバーではそれほど簡単ではありません。

私のアイデアは、rake タスク (rake ldap:test:prepare など) を作成して、実行するたびに LDAP サーバーを更新する (または依存関係にする) ことでしたが、テストに取り組んでいるとき (そして autotest を近くにするとき) はかなり時間がかかるようです。無理だよ。)

これを行うより良い方法はありますか?定義済みのフィクスチャでバインドできる Ruby ベースの偽の LDAP サーバーはありますか? 私が考えていない、さらにエレガントなソリューションは他にありますか? (LDAP を使用しないという選択肢はありません。)

4

5 に答える 5

8

LadleをテストLDAPサーバーとして使用してみてください:「Ladleは、rspec、cucumber、またはその他のrubyテストフレームワークでのテストに使用するためのライトウェイトディレクトリアクセス(LDAP)の強力な支援を提供します」。

https://github.com/NUBIC/ladle

于 2011-08-10T03:06:11.510 に答える
3

したがって、一般的に、Cucumber テストは統合および受け入れテスト用です。その場合、システムをエンドツーエンドでテストすることになっているため、LDAP 統合もテストする必要があります。私の提案は、スイングできる場合は、別の LDAP サーバーをセットアップし、ライブサーバーから定期的にダンプして、必要なテストデータをセットアップすることです。

ただし、各実行の前に LDAP データベースを更新する依存関係を持つという最初のアイデアは、それを行うための「正しい」方法であると言います。統合/受け入れテストには長い時間がかかると思われます。小さな(ユニット)部分だけでなく、システムの機能全体をテストしています。

Cucumber は単体テスト フレームワークではないため、そのように使用しないでください。テストがなかったために 2.3.4 に移行した後にアプリケーションが壊れた場合は、そこに行って単体テストを書き始めるべきだと思います...

これは私の個人的な偏見ですが、単体テストが実施されていない場合は、RSpec を検討します。Cucumber の英語に似た構文が好きなら、RSpec も同じように感じるでしょう。すでに Test::Unit である程度テストされている場合は、Test::Unit フレームワーク内で RSpec の雰囲気を得るために、Shoulda をパーティーに参加させるか、Context/Matchy (すべて github で入手可能) を使用することをお勧めします。

于 2009-09-22T12:08:12.813 に答える
2

各キュウリのシナリオが実行される前に、最終的に基本的に LDAP サーバーをクリーンアップすることができました。キュウリにフックを追加してこれを行いました

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

次に、LdapConnect クラス (複数のモデルが LDAP サーバーにアクセスする必要がある場合があるため、このオブジェクトを渡すだけで済みます)。LDAP インタラクションに ruby​​-net-ldap gem を使用しています

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
于 2009-09-30T16:56:48.660 に答える
1

私はこれを自分で調べていて、かなりレーダーの下にあるfakeldapの宝石に出くわしました。

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

私はそれを使用した後、いくつかの経験でこの答えに追加するかもしれません。

于 2010-10-28T09:51:16.130 に答える
0

本当の答えではありませんが...非常によく似た問題に取り組んでおり、LDAP認証とルックアップコードをキュウリでテストしています。テストでスタブを使用することを検討しましたか? LDAP 応答をスタブ化することを考えていましたが、まだ方法がわかりません。

マット

于 2009-09-21T19:56:49.607 に答える