Class: Neospec::Spec
- Inherits:
-
Object
- Object
- Neospec::Spec
- Defined in:
- lib/neospec/spec.rb,
lib/neospec/spec/result.rb,
lib/neospec/spec/result/failure.rb,
lib/neospec/spec/result/failure_encountered_error.rb
Defined Under Namespace
Classes: Result
Constant Summary collapse
- COMMANDS =
%w[Given And But Or When Then]
Instance Method Summary collapse
- #description ⇒ Object
- #duration ⇒ Object
- #expect(value = nil, &block) ⇒ Object
- #expectations ⇒ Object
- #failures ⇒ Object
- #file_name ⇒ Object
-
#initialize(description:, block:, stack: caller) ⇒ Spec
constructor
A new instance of Spec.
- #location ⇒ Object
- #log(message, context: nil, result: nil) ⇒ Object
- #result ⇒ Object
- #run(logger:) ⇒ Object
- #successful? ⇒ Boolean
Constructor Details
#initialize(description:, block:, stack: caller) ⇒ Spec
Returns a new instance of Spec.
5 6 7 8 9 10 11 12 13 |
# File 'lib/neospec/spec.rb', line 5 def initialize(description:, block:, stack: caller) # Everything here is prefixed to prevent people's specs overriding it, # this came to be because I've already accidentally done this a few # times. @__result = Neospec::Spec::Result.new @__description = description @__block = block @__stack = stack end |
Instance Method Details
#description ⇒ Object
15 16 17 |
# File 'lib/neospec/spec.rb', line 15 def description @__description end |
#duration ⇒ Object
33 34 35 |
# File 'lib/neospec/spec.rb', line 33 def duration @__result.duration end |
#expect(value = nil, &block) ⇒ Object
77 78 79 80 81 82 83 84 85 86 |
# File 'lib/neospec/spec.rb', line 77 def expect(value = nil, &block) raise ArgumentError, "Can't specify value AND pass a block" if value && block_given? Neospec::Expector.new( result: @__result, actual: block_given? ? block : value, stack: caller, logger: @__logger ) end |
#expectations ⇒ Object
41 42 43 |
# File 'lib/neospec/spec.rb', line 41 def expectations @__result.expectations end |
#failures ⇒ Object
45 46 47 |
# File 'lib/neospec/spec.rb', line 45 def failures @__result.failures end |
#file_name ⇒ Object
25 26 27 |
# File 'lib/neospec/spec.rb', line 25 def file_name location.split(":").first || "" end |
#location ⇒ Object
19 20 21 22 23 |
# File 'lib/neospec/spec.rb', line 19 def location # When run in a Taylor exported application, this is for nil due to the # code having been run through mrbc (I believe) @__stack.first || "" end |
#log(message, context: nil, result: nil) ⇒ Object
49 50 51 |
# File 'lib/neospec/spec.rb', line 49 def log(, context: nil, result: nil) @__logger.log(, context: context, result: result) end |
#result ⇒ Object
29 30 31 |
# File 'lib/neospec/spec.rb', line 29 def result @__result end |
#run(logger:) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/neospec/spec.rb', line 53 def run(logger:) @__logger = logger instance_exec { log(@__description, context: :describe) } result.start! instance_exec(&@__block) rescue Neospec::Spec::Result::FailureEncounteredError # Do nothing rescue => error failures << Neospec::Spec::Result::Failure.new( stack: error.backtrace, message: "Raised #{error.class}, '#{error.}'" ) @__logger.log("raised #{error.class}", context: :error, result: result) ensure result.finish! end |
#successful? ⇒ Boolean
37 38 39 |
# File 'lib/neospec/spec.rb', line 37 def successful? @__result.successful? end |