instance method
assert_no_changes
Ruby on Rails 8.1.2
Since v5.2.8.1Signature
assert_no_changes(expression, message = nil, from: UNTRACKED, &block)
Assertion that the result of evaluating an expression is not changed before and after invoking the passed in block.
assert_no_changes 'Status.all_good?' do post :create, params: { status: { ok: true } } end
Provide the optional keyword argument :from to specify the expected initial value. The comparison is done using case equality (===), which means you can specify patterns or classes:
# Exact value match assert_no_changes -> { Status.all_good? }, from: true do post :create, params: { status: { ok: true } } end # Case equality assert_no_changes -> { user.token }, from: /\w{32}/ do user.touch end # Type check assert_no_changes -> { current_error }, from: RuntimeError do retry_operation end
An error message can be specified.
assert_no_changes -> { Status.all_good? }, 'Expected the status to be good' do post :create, params: { status: { ok: false } } end
Parameters
-
expressionreq -
messageopt = nil -
fromkey = UNTRACKED -
blockblock
Source
# File activesupport/lib/active_support/testing/assertions.rb, line 281
def assert_no_changes(expression, message = nil, from: UNTRACKED, &block)
exp = expression.respond_to?(:call) ? expression : -> { eval(expression.to_s, block.binding) }
before = exp.call
retval = _assert_nothing_raised_or_warn("assert_no_changes", &block)
unless from == UNTRACKED
rich_message = -> do
error = "Expected initial value of #{from.inspect}, got #{before.inspect}"
error = "#{message}.\n#{error}" if message
error
end
assert from === before, rich_message
end
after = exp.call
rich_message = -> do
code_string = expression.respond_to?(:call) ? _callable_to_source_string(expression) : expression
error = "`#{code_string}` changed."
error = "#{message}.\n#{error}" if message
error = "#{error}\n#{diff before, after}" if Minitest::VERSION > "6"
error
end
if before.nil?
assert_nil after, rich_message
else
assert_equal before, after, rich_message
end
retval
end
Defined in activesupport/lib/active_support/testing/assertions.rb line 281
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveSupport::Testing::Assertions