Based on Jest Roblox v3.x, generated 2026-02-07.
Jest Roblox is a Luau port of Jest for the Roblox platform. It closely follows the upstream Jest API but has critical deviations due to Luau language constraints.
Critical deviations from JS Jest:
.never instead of .not (reserved keyword)jest.fn() returns two values: mock object + forwarding function0, "", {} are truthy in Luau (only false and nil are falsy)- All globals (
describe, expect, jest, etc.) must be explicitly imported .each uses table syntax, not tagged template literals- Custom matchers take
self as first parameter
Read core-deviations first when working with this codebase.
Core References
| Topic | Description | Reference |
|---|
| Deviations | All Luau/Roblox differences from JS Jest | core-deviations |
| Test Structure | describe, test/it, hooks,.each,.only/.skip | core-test-structure |
| Matchers | toBe, toEqual, toContain, toThrow, mock matchers | core-matchers |
| Asymmetric Matchers | expect.anything/any/nothing/callable,.resolves/.rejects | core-asymmetric-matchers |
| Mocking | jest.fn(), spyOn, mock.calls, return values | core-mocking |
| Configuration | jest.config.lua, runCLI, reporters, options | core-configuration |
Features
Testing Patterns
Mocking
Extended Matchers
| Topic | Description | Reference |
|---|
| Jest Extended | When core matchers aren't expressive enough: exact booleans, ranges, membership, entries, call order, side effects | feature-jest-extended |
Advanced
| Topic | Description | Reference |
|---|
| Benchmarking | benchmark(), Reporter, Profiler, CustomReporters | advanced-benchmarking |