Loading...
Loading...
TestEZ, mocking Roblox services, dependency injection, CI/CD with Lune, test patterns.
npx skill4agent add tabooharmony/roblox-brain roblox-testingroblox-luau-coreroblox-luau-typesroblox-luau-patternsroblox-security[dev-dependencies] TestEZ = "roblox/testez@0.4.1"wally.toml*.spec.luaudescribeitbeforeEachafterEachexpect(x).to.equal(y).to.be.near(n, ε).to.throw()-- BAD: untestable outside Studio
local store = game:GetService("DataStoreService"):GetDataStore("PlayerData")
-- GOOD: inject dependency
local function saveData(player, data, dataStore)
dataStore:SetAsync("player_" .. player.UserId, data)
end
-- Module init pattern:
function Manager.init(dataStoreService)
_dss = dataStoreService or game:GetService("DataStoreService")
end-- MockDataStore: in-memory Get/Set/Update
local M = {}
function M.new() return setmetatable({_data={}}, {__index=M}) end
function M:GetAsync(k) return self._data[k] end
function M:SetAsync(k,v) self._data[k]=v end
function M:GetDataStore() return self end
-- MockRemoteEvent: OnServerEvent + FireServer
-- MockSignal: Connect/Fire with Connected flag# aftman.toml
[tools]
lune = "lune-org/lune@0.8.0"selene src/stylua --check src/luau-lsp analyzelune run tests/run.luau-- tests/run.luau
local TestEZ = require("@testez")
local results = TestEZ.TestBootstrap:run({game:GetService("ReplicatedStorage")}, TestEZ.Reporters.TextReporter)
if results.failureCount > 0 then os.exit(1) endbeforeEachgame:GetService()wally.lockreferences/full.md