Testing Basics
Assert Truthy
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
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}"
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
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
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