Generation Modes
FakeDataDSL supports different generation modes for various testing scenarios.
Available Modes
Random Mode (Default)
Generates realistic random data:
schema = registry.schema('User')
record = schema.generate(mode: :random)
# => Normal, realistic data
Edge Mode
Generates edge case values (empty, boundary, null):
record = schema.generate(mode: :edge)
# => Edge cases: empty strings, null values, boundary numbers
Use cases:
- Testing validation logic
- Finding boundary bugs
- Stress testing
Invalid Mode
Generates intentionally invalid data:
record = schema.generate(mode: :invalid)
# => Invalid data: wrong types, malformed values
Use cases:
- Testing error handling
- Validating input sanitization
- Security testing
Mixed Mode
Combines random, edge, and invalid values:
record = schema.generate(mode: :mixed)
# => Mix of random, edge, and invalid values
Custom ratios:
record = schema.generate(mode: :mixed, ratios: { random: 70, edge: 20, invalid: 10 })
Mode Examples
Random Mode
User:
name: name
age: number(18..65)
email: email
# Generates:
# { "name" => "John Smith", "age" => 42, "email" => "john@example.com" }
Edge Mode
# Same schema, edge mode:
# { "name" => "", "age" => 18, "email" => "" }
# or
# { "name" => "A", "age" => 65, "email" => "a@b.c" }
Invalid Mode
# Same schema, invalid mode:
# { "name" => 123, "age" => "not a number", "email" => nil }
Mode Configuration
Set default mode globally:
FakeDataDSL.configure do |config|
config.default_mode = :edge
end
Or per-schema:
schema = registry.schema('User')
schema.default_mode = :invalid
Combining with Behaviors
Modes work with behaviors:
User:
@latency 100ms
@failure 5%
name: name
# Edge mode + behaviors:
# Generates edge cases with delays and occasional failures
See Also
- Behaviors Guide - Behavior system
- Examples - Mode usage examples