class Assert::Context
unstub all stubs automatically (see stub.rb)
A Context
is a scope for tests to run in. Contexts have setup and teardown blocks, subjects, and descriptions. Tests are run in the scope of a Context
instance. Therefore, a Context
should have minimal base logic/methods/instance_vars. The instance should remain pure to not pollute test scopes.
Attributes
Public Class Methods
# File lib/assert/context.rb, line 34 def initialize(running_test, config, result_callback) @__assert_running_test__ = running_test @__assert_config__ = config @__assert_with_bt__ = [] @__assert_pending__ = 0 @__assert_result_callback__ = proc do |result| unless @__assert_with_bt__.empty? result.set_with_bt(@__assert_with_bt__.dup) end result_callback.call(result) result end end
Public Instance Methods
Check if the result is true. If so, create a new pass result, Otherwise create a new fail result with the desc and fail msg.
# File lib/assert/context.rb, line 52 def assert(assertion, desc = nil) if assertion pass else what = if block_given? yield else "Failed assert: assertion was "\ "`#{Assert::U.show(assertion, __assert_config__)}`." end fail(fail_message(desc, what)) end end
The opposite of assert. Check if the result is false. If so, create a new pass result. Otherwise create a new fail result with the desc and fail msg.
# File lib/assert/context.rb, line 70 def assert_not(assertion, fail_desc = nil) assert(!assertion, fail_desc) do "Failed assert_not: assertion was "\ "`#{Assert::U.show(assertion, __assert_config__)}`." end end
# File lib/assert/context.rb, line 78 def assert_that( actual_value = Assert::ActualValue.not_given, &actual_value_block) Assert::ActualValue.new(actual_value, context: self, &actual_value_block) end
adds a Fail result to the end of the test’s results break test execution if assert is configured to halt on failures
# File lib/assert/context.rb, line 105 def fail(message = nil) if @__assert_pending__ == 0 if halt_on_fail? raise Result::TestFailure, message || "" else capture_result(Assert::Result::Fail, message || "") end elsif halt_on_fail? raise Result::TestSkipped, "Pending fail: #{message || ""}" else capture_result(Assert::Result::Skip, "Pending fail: #{message || ""}") end end
adds an Ignore result to the end of the test’s results does not break test execution
# File lib/assert/context.rb, line 99 def ignore(ignore_msg = nil) capture_result(Assert::Result::Ignore, ignore_msg) end
# File lib/assert/context.rb, line 161 def inspect "#<#{self.class}>" end
adds a Pass result to the end of the test’s results does not break test execution
# File lib/assert/context.rb, line 86 def pass(pass_msg = nil) if @__assert_pending__ == 0 capture_result(Assert::Result::Pass, pass_msg) else capture_result( Assert::Result::Fail, "Pending pass (make it not pending)", ) end end
runs block and any fails are skips and any passes are fails
# File lib/assert/context.rb, line 127 def pending(&block) begin @__assert_pending__ += 1 instance_eval(&block) ensure @__assert_pending__ -= 1 end end
adds a Skip result to the end of the test’s results breaks test execution
# File lib/assert/context.rb, line 122 def skip(skip_msg = nil, called_from = nil) raise Result::TestSkipped, (skip_msg || ""), called_from end
# File lib/assert/context.rb, line 152 def subject unless instance_variable_defined?("@__assert_subject__") @__assert_subject__ = instance_eval(&self.class.subject) if self.class.subject end @__assert_subject__ end
alter the backtraces of fail/skip results generated in the given block
# File lib/assert/context.rb, line 137 def with_backtrace(bt, &block) bt ||= [] begin @__assert_with_bt__.push(bt.first) instance_eval(&block) rescue Result::TestSkipped, Result::TestFailure => ex if ex.assert_with_bt.nil? && !@__assert_with_bt__.empty? ex.assert_with_bt = @__assert_with_bt__.dup end raise(ex) ensure @__assert_with_bt__.pop end end
Protected Instance Methods
Returns a Proc that will output a custom message along with the default fail message.
# File lib/assert/context.rb, line 169 def fail_message(fail_desc = nil, what_failed_msg = nil) [fail_desc, what_failed_msg].compact.join("\n") end
Private Instance Methods
# File lib/assert/context.rb, line 179 def capture_result(result_klass, msg) @__assert_result_callback__.call( result_klass.for_test(@__assert_running_test__, msg, caller_locations), ) end
# File lib/assert/context.rb, line 175 def halt_on_fail? __assert_config__.halt_on_fail end