Module: RSpec::Core::DSL
Relationships & Source Files | |
Defined in: | rspec-core/lib/rspec/core/dsl.rb |
Overview
DSL
defines methods to group examples, most notably describe
, and exposes them as class methods of ::RSpec
. They can also be exposed globally (on main
and instances of Module
) through the Configuration
option expose_dsl_globally
.
By default the methods describe
, context
and example_group
are exposed. These methods define a named context for one or more examples. The given block is evaluated in the context of a generated subclass of ExampleGroup
.
Examples:
RSpec.describe "something" do
context "when something is a certain way" do
it "does something" do
# example code goes here
end
end
end
Class Attribute Summary
- .exposed_globally? ⇒ Boolean readonly Internal use only Internal use only
- .top_level rw Internal use only Internal use only
Class Method Summary
- .change_global_dsl(&changes) Internal use only Internal use only
- .example_group_aliases Internal use only Internal use only
- .expose_example_group_alias(name) Internal use only Internal use only
- .expose_example_group_alias_globally(method_name) Internal use only Internal use only
-
.expose_globally!
Internal use only
Internal use only
Adds the describe method to Module and the top level binding.
-
.remove_globally!
Internal use only
Internal use only
Removes the describe method from Module and the top level binding.
Class Attribute Details
.exposed_globally? ⇒ Boolean
(readonly)
This method is for internal use only.
# File 'rspec-core/lib/rspec/core/dsl.rb', line 32
def self.exposed_globally? @exposed_globally ||= false end
.top_level (rw)
This method is for internal use only.
[ GitHub ]
# File 'rspec-core/lib/rspec/core/dsl.rb', line 53
attr_accessor :top_level
Class Method Details
.change_global_dsl(&changes)
This method is for internal use only.
[ GitHub ]
# File 'rspec-core/lib/rspec/core/dsl.rb', line 89
def self.change_global_dsl(&changes) (class << top_level; self; end).class_exec(&changes) Module.class_exec(&changes) end
.example_group_aliases
This method is for internal use only.
[ GitHub ]
# File 'rspec-core/lib/rspec/core/dsl.rb', line 27
def self.example_group_aliases @example_group_aliases ||= [] end
.expose_example_group_alias(name)
This method is for internal use only.
[ GitHub ]
# File 'rspec-core/lib/rspec/core/dsl.rb', line 37
def self.expose_example_group_alias(name) return if example_group_aliases.include?(name) example_group_aliases << name (class << RSpec; self; end).__send__(:define_method, name) do |*args, &example_group_block| group = RSpec::Core::ExampleGroup.__send__(name, *args, &example_group_block) RSpec.world.record(group) group end expose_example_group_alias_globally(name) if exposed_globally? end
.expose_example_group_alias_globally(method_name)
This method is for internal use only.
[ GitHub ]
# File 'rspec-core/lib/rspec/core/dsl.rb', line 81
def self.expose_example_group_alias_globally(method_name) change_global_dsl do remove_method(method_name) if method_defined?(method_name) define_method(method_name) { |*a, &b| ::RSpec.__send__(method_name, *a, &b) } end end
.expose_globally!
This method is for internal use only.
Adds the describe method to Module and the top level binding.
# File 'rspec-core/lib/rspec/core/dsl.rb', line 58
def self.expose_globally! return if exposed_globally? example_group_aliases.each do |method_name| expose_example_group_alias_globally(method_name) end @exposed_globally = true end
.remove_globally!
This method is for internal use only.
Removes the describe method from Module and the top level binding.
# File 'rspec-core/lib/rspec/core/dsl.rb', line 70
def self.remove_globally! return unless exposed_globally? example_group_aliases.each do |method_name| change_global_dsl { undef_method method_name } end @exposed_globally = false end