Truthy checks are useful when a test cares whether a condition succeeds.

truthy assertion Ruby treats every value except `false` and `nil` as truthy, but tests often check a specific condition.

Assert Truthy

email
assert_truthy.rb
Replay: real traced execution (multi-file project)
email = "ada@example.com"
has_at = email.include?("@")
has_name = email.length > 0

valid = has_at && has_name
status = valid ? "pass" : "fail"

puts "email=#{email}"
puts "has_at=#{has_at}"
puts "status=#{status}"
email = "missing-at"
has_at = email.include?("@")
has_name = email.length > 0

valid = has_at && has_name
status = valid ? "pass" : "fail"

puts "email=#{email}"
puts "has_at=#{has_at}"
puts "status=#{status}"
email = ""
has_at = email.include?("@")
has_name = email.length > 0

valid = has_at && has_name
status = valid ? "pass" : "fail"

puts "email=#{email}"
puts "has_at=#{has_at}"
puts "status=#{status}"
  1. email ← ada@example.com, has_at ← true, has_name ← true, valid ← true

    1email→ ada@example.com = "ada@example.com"  #@email="missing-at", ""2has_at→ true = email.include?("@")true3has_name→ true = email.length15 > 045valid→ true = has_attrue && has_nametrue6status→ pass = validtrue ? "pass" : "fail"78puts "email=#{emailada@example.com}"9puts "has_at=#{has_attrue}"10puts "status=#{statuspass}"
    outputemail=ada@example.com
    has_at=true
    status=pass
  1. email ← missing-at, has_at ← false, has_name ← true, valid ← false

    1email→ missing-at = "missing-at"2has_at→ false = email.include?("@")false3has_name→ true = email.length10 > 045valid→ false = has_atfalse && has_nametrue6status→ fail = validfalse ? "pass" : "fail"78puts "email=#{emailmissing-at}"9puts "has_at=#{has_atfalse}"10puts "status=#{statusfail}"
    outputemail=missing-at
    has_at=false
    status=fail
  1. email ← (empty), has_at ← false, has_name ← false, valid ← false

    1email→ (empty) = ""2has_at→ false = email.include?("@")false3has_name→ false = email.length0 > 045valid→ false = has_atfalse && has_namefalse6status→ fail = validfalse ? "pass" : "fail"78puts "email=#{email(empty)}"9puts "has_at=#{has_atfalse}"10puts "status=#{statusfail}"
    outputemail=
    has_at=false
    status=fail