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 function
0, "", {} 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 |