2011-07-27 2 views
4

弊社の認証および認可システムに接続するカスタムRuby Gemを作成し、宝石のユニットテストの開発を開始しました。Rspecによる宝石のテスト

私たちのレールアプリでは、environment.rbと設定値を含むカスタムイニシャライザとyamlファイルでGemを設定できます。

スタンドアロンのGemをテストするために、レールでGemの設定を翻訳する必要があります。これをRspecに変換して統合テストを実行するにはどうすればよいですか?

レールで

宝石構成

# environment.rb 
MyGem.configure do |config| 
    config.url = MY_CONFIG ['url'] 
    config.application_name = MY_CONFIG ['app_name'] 
    config.application_id = MY_CONFIG ['app_id'] 
    config.logger = Rails.logger 
    config.log_level = :debug 


# Rails config/initalizers/load_config.rb 
# Custom config file loading automatically done via initializers 
MY_CONFIG = YAML.load_file("#{Rails.root.to_s}/config/my_config.yml")[Rails.env] 

# config/my_config.yml 
defaults: &defaults 
    url: http://url/to/service 
    app_name: my app 
    app_id: 1 

development: 
    <<: *defaults 

test: 
    <<: *defaults 

production: 
    <<: *defaults 

エンド

+0

問題はありません。何が効いていないのですか? – tjeden

+0

私は最初は明確ではありませんでした。私は宝石そのものをテストしようとしています。 –

答えて

6

ここであなたは、あなたがそれを実行して行くと思いますどのように見ることができます簡単なプロジェクトです:あなたがしている場合multiplier

まず第一には、 宝石管理を自分で行ってはいけません。jewelerのようなヘルパーツールを使用してください。 (ここで、これにより

jeweler --rspec your_gem_name 

が、それはセットアップに単一のメインファイルを持っているために起こっているスケルトン宝石を起こっ:宝石商の宝石をインストールします(逸品宝石商をインストール)し、あなたはそれがインストールされていたら、あなたの宝石の挙を作成します必要なgemファイルが必要です)とspecフォルダが必要です。

どこ当社の構成の生活スペックフォルダでspec_helper.rbがあります、それはだ、私がやったことはした

$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib')) 
$LOAD_PATH.unshift(File.dirname(__FILE__)) 
require 'rspec' 
require 'multiplier' 

# Requires supporting files with custom matchers and macros, etc, 
# in ./support/ and its subdirectories. 
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f} 

RSpec.configure do |config| 

end 

Multiplier.configure do |config| #these are the only lines I added myself 
    config.multiplier 4 
end 

だから、ここ私たちの宝石のための設定に住んでいる、しかし、あなたもそれを行うことができますあなたがそれを必要とするならば、それぞれの仕様。しかし、すべての仕様に単一の設定を使用したい場合は、これを配置する必要があります。

+0

テストを個別の仕様に追加して移動するには、このデザインがより好きです。宝石は、すでにツールで作成されましたが、情報に感謝します!興味のある方は追加の情報@ https://github.com/radar/guides/blob/master/gem-development.mdが見つかりました。 –

+0

また、bundleerを使ってgemを管理することもできます: 'bundle gem new_gem' –