グローバル名前空間DSL
RSpecには、以下のいくつかのトップレベルの構造があり、振る舞いを記述することができます。
-
RSpec.describe
: グループの例を記述するための名前付きコンテキストを定義します。 -
RSpec.shared_examples
: 後で例のグループに含めることができる共有の例を定義します。 -
RSpec.shared_context
: 後で例のグループに含めることができる共通のコンテキスト(before
、let
、ヘルパーメソッドなどを使用)を定義します。
これらの構造は、これまでメインオブジェクトから直接利用できるようになっていました。そのため、RSpec.
の接頭辞なしでファイルの先頭でこれらを使用することができました。また、クラスやモジュールからも利用できるようになっており、例を特定の定数名前空間内にスコープすることができます。
RSpec 3では、このグローバルなモンキーパッチを無効にするオプションが提供されています。
config.expose_dsl_globally = false
後方互換性のため、デフォルトではtrue
に設定されています。
デフォルトではRSpecはグローバルなDSLの使用を許可します
次の内容で「spec/example_spec.rb」という名前のファイルがあるとします:
describe "specs here" do
it "passes" do
end
end
rspec
を実行すると
出力には「1 example, 0 failures」という文字列が含まれているはずです。
デフ ォルトではrspec/autorunはグローバルなDSLの使用を許可します
次の内容で「spec/example_spec.rb」という名前のファイルがあるとします:
require 'rspec/autorun'
describe "specs here" do
it "passes" do
end
end
ruby spec/example_spec.rb
を実行すると
出力には「1 example, 0 failures」という文字列が含まれているはずです。
グローバルな公開が無効になっている場合、トップレベルのDSLは機能しません
次の内容で「spec/example_spec.rb」という名前のファイルがあるとします:
RSpec.configure { |c| c.expose_dsl_globally = false }
describe "specs here" do
it "passes" do
end
end
rspec
を実行すると
出力には「undefined method `describe'」という文字列が含まれているはずです。
設定に関係なく
次の内容で「spec/example_spec.rb」という名前のファイルがあるとします:
RSpec.configure { |c| c.expose_dsl_globally = true }
RSpec.describe "specs here" do
it "passes" do
end
end
rspec
を実行すると
出力には「1 example, 0 failures」という文字列が含まれているはずです。