Class: Spectroscope::Context::Scope
- Defined in:
- lib/spectroscope/context.rb
Overview
Context scope is used for defining sepcifications.
Instance Method Summary collapse
-
#after(which = :each, *tags, &procedure) ⇒ Object
Define a complex after procedure.
-
#before(which = :each, *tags, &procedure) ⇒ Object
Define before procedure.
-
#describe(topic, *tags, &block) ⇒ Object
(also: #context)
Create a new sub-specification.
-
#initialize(group) ⇒ Scope
constructor
Setup new evaluation scope.
-
#it(label = nil, *tags, &procedure) ⇒ Object
(also: #example)
Create an example behavior.
- #it_behaves_like(label) ⇒ Object
-
#its(invocation, &block) ⇒ Object
Subject-oriented example.
- #let(name, &block) ⇒ Object
- #let!(name, &block) ⇒ Object
-
#omit(reason = true, &block) ⇒ Object
Mark specs or sub-cases to be omitted.
-
#skip(reason, &block) ⇒ Object
Mark specs or sub-cases to be skipped.
- #subject(topic = nil, &block) ⇒ Object
Constructor Details
#initialize(group) ⇒ Scope
Setup new evaluation scope.
208 209 210 211 212 213 214 215 216 217 |
# File 'lib/spectroscope/context.rb', line 208 def initialize(group) @_group = group @_hooks = group.hooks @_skips = group.skips @_omits = group.omits if group.parent include(group.parent.scope) end end |
Instance Method Details
#after(which = :each, *tags, &procedure) ⇒ Object
Define a complex after procedure. The #before method allows before procedures to be defined that are triggered by a match against the unit’s target method name or aspect description. This allows groups of specs to be defined that share special teardown code.
333 334 335 |
# File 'lib/spectroscope/context.rb', line 333 def after(which=:each, *, &procedure) @_hooks.add(:after, which, *, &procedure) end |
#before(which = :each, *tags, &procedure) ⇒ Object
Define before procedure.
300 301 302 |
# File 'lib/spectroscope/context.rb', line 300 def before(which=:each, *, &procedure) @_hooks.add(:before, which, *, &procedure) end |
#describe(topic, *tags, &block) ⇒ Object Also known as: context
Create a new sub-specification.
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 |
# File 'lib/spectroscope/context.rb', line 222 def describe(topic, *, &block) settings = {} settings[:parent] = @_group settings[:subject] = @_group.subject settings[:tags] = if Class === topic settings[:subject] = topic settings[:label] = topic.name else settings[:label] = topic end group = Context.new(settings, &block) @_group.specs << group return group end |
#it(label = nil, *tags, &procedure) ⇒ Object Also known as: example
Create an example behavior.
If tags or keys are given, so must a label.
249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 |
# File 'lib/spectroscope/context.rb', line 249 def it(label=nil, *, &procedure) keys = (Hash=== ? .pop : {}) settings = { :parent => @_group, :hooks => @_hooks, :skips => @_skips, :omits => @_omits, :topic => @_topic, :label => label, :tags => , :keys => keys } spec = Example.new(settings, &procedure) @_group.specs << spec spec end |
#it_behaves_like(label) ⇒ Object
422 423 424 425 |
# File 'lib/spectroscope/context.rb', line 422 def it_behaves_like(label) proc = Spectroscope.shared_examples[label] module_eval(&proc) end |
#its(invocation, &block) ⇒ Object
Subject-oriented example.
RSpec itself wraps this whole thing in another ‘describe(invocation)` clause, but that seems completely extraneous.
397 398 399 400 401 402 403 404 405 406 407 408 409 410 |
# File 'lib/spectroscope/context.rb', line 397 def its(invocation, &block) case invocation when Symbol it(invocation.to_s) do subject.__send__(invocation).instance_eval(&block) end else it(invocation.to_s) do #eval("subject.#{invocation}", binding).instance_eval(&block) calls = invocation.to_s.split('.') calls.inject(subject){ |s,m| s.__send__(invocation) }.instance_eval(&block) end end end |
#let(name, &block) ⇒ Object
368 369 370 371 372 373 |
# File 'lib/spectroscope/context.rb', line 368 def let(name, &block) define_method(name) do #_let[name] ||= block.call @_let.fetch(name){ |k| @_let[k] = instance_eval(&block) } end end |
#let!(name, &block) ⇒ Object
378 379 380 381 |
# File 'lib/spectroscope/context.rb', line 378 def let!(name, &block) let(name, &block) before { __send__(name) } end |
#omit(reason = true, &block) ⇒ Object
Mark specs or sub-cases to be omitted. Omitting a test is different from skipping, in tha the later is still sent up to the test harness, where as omitted tests never get added at all.
361 362 363 |
# File 'lib/spectroscope/context.rb', line 361 def omit(reason=true, &block) @_omits << [reason, block] end |
#skip(reason, &block) ⇒ Object
Mark specs or sub-cases to be skipped.
346 347 348 |
# File 'lib/spectroscope/context.rb', line 346 def skip(reason, &block) @_skips << [reason, block] end |
#subject(topic = nil, &block) ⇒ Object
386 387 388 389 |
# File 'lib/spectroscope/context.rb', line 386 def subject(topic=nil, &block) @_topic = topic define_method(:subject, &block) end |