キュウリのテストは、LDAPサーバとレール
-
12-09-2019 - |
質問
私は、LDAPサーバでユーザを認証するためにAuthlogicを使用して自分のアプリケーションのためのいくつかのキュウリのテストを記述しようとしているが、実際に格納されています。
アプリケーションが正常に動作するようだが、どこでトラブルに実行していますそれのためにテストを書いている(私が知っている、私が知っている、私は最初のテストを書いてきたはずです。)データがテストデータベースを持っているのは簡単です各実行後にクリアしますが、LDAPサーバとそう簡単ではありません。
私の考えは、(:テスト:すくいLDAPなどの準備)rakeタスク書くことでした各々の実行前に、LDAPサーバをリフレッシュするために(またはそれ依存します)が、それは私がテストに取り組んでいたときにかかるかなりの時間だ(と自動テストが近くに不可能になります。)
これを行うには良い方法はありますか?私は事前に定義された備品とに結合することができルビーベースの偽のLDAPサーバーはありますか?私は考えておりませんいくつかの他にも、よりエレガントな解決策はありますか? (LDAPを使用していないことはオプションではありません。)
解決
だから、一般的なキュウリのテストに統合し、受け入れテストのためのものです。すなわちシステムのエンドツーエンドテストすることになっている場合であるので、それは同様にLDAP統合を試験すべきです。私の提案、あなたがそれをスイングすることができた場合は、別のLDAPサーバを設定し、必要なものは何でも、テストデータとそれを設定するには、ライブ1からの定期的なダンプを行うことであろう。
私は、各実行の前にLDAP DBを更新し、依存関係を持っていることのあなたの最初のアイデアは、それを行うには「正しい」方法であると言うだろうけれども。統合/受け入れテストは、のはずは長い時間がかかることです。それはシステムだけではなく、小さな(ユニット)個の機能全体をテストしている。
キュウリユニットテストフレームワークではなく、そのように使用すべきではありません。あなたは私はあなたがそこに取得し、いくつかのユニットテストを書き始めるべきだと思うのテストを持っていなかったので、あなたのアプリケーションは、2.3.4に移行した後に壊れた場合...
さて、これは私の個人的なバイアスがあるが、あなたの場所に何のユニットテストを持っていない場合、私はRSpecのを見てみましょう。あなたはキュウリの英語のような構文のような場合は、RSpecのは間違いなく似た感じになります。あなたはすでに多少のテスト::ユニットでテストされている場合、私は間違いなく、パーティーやおそらくコンテキストにShouldaをもたらすことをお勧め/(githubの上で使用可能なすべてが)MATCHYはRSpecのは、テスト::ユニットの枠組みの中で感じて取得します。
他のヒント
テストLDAPサーバーとしてお玉を使って行く持っている:「おたま料理を出しRSpecの、キュウリ、または任意の他のルビーのテストフレームワークでテストで使用するために軽量ディレクトリアクセス(LDAP)のhelpingsを蒸し」
私は最終的に各キュウリシナリオが実行される前に、基本的には、LDAPサーバーを清掃するために周りに取得することができました。私はキュウリにフックを追加することによって、これをしなかった。
Before do |scenario|
puts "Cleaning Up LDAP Server"
LdapConnect.new(:admin => true).clear_users!
end
そして、私のLdapConnectクラス(複数のモデルは、LDAPサーバをタッチする必要があるかもしれませんから、私はちょうどこのオブジェクトの周りに渡すことができます)。私は、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の宝石に遭遇しています。
http://github.com/aanand/fakeldapする http://rubygems.org/gems/fakeldap
私はそれを使用した後、私はいくつかの経験で、この答えに追加することもできます。
そうでもない答えけど...私はキュウリとLDAP認証と検索コードをテストし、非常に同様の問題に取り組んでいます。あなたのテストでスタブを使用してに見たことがありますか?私はまだそれを行う方法を考え出したていない...私のLDAP応答をスタブを考えていた。
マット