web-dev-qa-db-ja.com

RSpec 2でspec_helper.rbを自動的にロードする方法

Rubyでgemを開発する場合、ほとんどの場合、RSpecを自分のニーズに合わせて構成できるファイルが必要です。それを行う前に、すべてのspecの例で使用できるヘルパーモジュールが必要です。

Railsアプリケーションではspec/spec_helper.rbという名前のファイルが使用されます。私を悩ます1つのことは、典型的なRails環境では、ロードするサンプルを含むすべてのファイルでこのspec_helper.rbファイルが必要です過去には、ロードパスの変更とサンプルファイル内の相対requireパスに関連して、これに関して多くの問題がありました。

さて、私のgemについては、サンプルファイルをロードする前にRSpecにspec_helper.rbファイルを要求するように指示したいだけです。 rspec実行可能ファイル、またはRakefileで定義できるrake specタスクを呼び出すかどうかは事実とは無関係です。

私はRSpecにspec_helper.rbの場所のみを伝えることができることを知っていますが、このspec_helper.rbはすべてのサンプルファイルを手動で必要としますが、そのアプローチの追加メンテナンスを避けたいです。

これを達成するためのより良い方法はありますか?

51
aef

RSpec 2では、/specフォルダーは常に自動的にロードパスにあります。つまり、必要なものは次のとおりです。

require 'spec_helper'

スペックファイルの先頭。これは常に/spec/spec_helper.rbをロードしますが、これはあなたが逃げることができる最小限のものです。

つまり、次のような恐ろしいアプローチが必要ですdo n't

require File.join(File.dirname(File.dirname(__FILE__)), 'spec_helper.rb')

(異なるネストレベルに合わせて更新する必要があります)。

.rspecファイルにオプション--require spec_helperを追加することもできます。これは、各specファイルでこのファイルを必要としますが、上部に手動のrequireステートメントはありません。

112
Jacob

--require spec_helper行を実行すると、RSpec 3.0の.rspecファイルにrspec --init行が自動的に追加されます。

37
Doug