Class: Neospec::Spec

Inherits:
Object
  • Object
show all
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

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

#descriptionObject



15
16
17
# File 'lib/neospec/spec.rb', line 15

def description
  @__description
end

#durationObject



33
34
35
# File 'lib/neospec/spec.rb', line 33

def duration
  @__result.duration
end

#expect(value = nil, &block) ⇒ Object

Raises:

  • (ArgumentError)


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

#expectationsObject



41
42
43
# File 'lib/neospec/spec.rb', line 41

def expectations
  @__result.expectations
end

#failuresObject



45
46
47
# File 'lib/neospec/spec.rb', line 45

def failures
  @__result.failures
end

#file_nameObject



25
26
27
# File 'lib/neospec/spec.rb', line 25

def file_name
  location.split(":").first || ""
end

#locationObject



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(message, context: nil, result: nil)
  @__logger.log(message, context: context, result: result)
end

#resultObject



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.message}'"
  )
  @__logger.log("raised #{error.class}", context: :error, result: result)
ensure
  result.finish!
end

#successful?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/neospec/spec.rb', line 37

def successful?
  @__result.successful?
end