roblox-testing について
Roblox 開発者が Luau のユニットテストや統合テストを書くためのスキルです。TestEZ、サービスのモック、依存性注入、Lune を使った CI/CD を扱います。
主な機能
- 01TestEZ のテスト構成とアサーション
- 02依存性注入によるテスト容易性
- 03Roblox サービスとシグナルのモック
- 04Lune ベースの CI/CD パイプライン
- 05テストの優先順位と注意点
活用シーン
- 01TestEZ による Luau モジュールのテスト
- 02DataStore や RemoteEvent のモック
- 03Lune による CI でのテスト実行
- 04依存性注入を使ったコードのリファクタリング
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ tabooharmony/ roblox-brain --skill roblox-testingインストール後、Claude Code で/roblox-testingを入力して読み込まれたか確認します。
同梱ファイルreferences/full.md
詳細
読み込むタイミング
ユニットテスト/統合テストの作成、Roblox サービスのモック、Lune を使った CI/CD の設定、または依存性注入によるテスト容易性を考慮したコードのリファクタリングを行うときに読み込みます。構文については roblox-luau-core、型設計については roblox-luau-types、アーキテクチャについては roblox-luau-patterns、検証については roblox-security に引き継いでください。
クイックリファレンス
TestEZ(BDD フレームワーク)
- インストール:
wally.tomlの[dev-dependencies] TestEZ = "roblox/[email protected]" - ファイル:
*.spec.luau、ソースと同じ場所に配置 - ブロック:
describe→it→beforeEach/afterEach - アサーション:
expect(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
Lune を使った CI/CD
# aftman.toml
[tools]
lune = "lune-org/[email protected]"
パイプライン:selene src/ → stylua --check src/ → luau-lsp analyze → lune 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) end
テストの優先順位
- DataStore の保存/読み込みのラウンドトリップ(データ損失を防止)
- マネタイズの ProcessReceipt(冪等性)
- コア計算(ダメージ、バフ、経済)
- サーバーの検証(リモートの悪用)
注意点
- 状態をリセットするには
beforeEachを使用します。ロジック内でgame:GetService()を呼び出してはいけません。 - テストは実行順に依存しないようにします。CI にはモックが必要です。
wally.lockをコミットしてください。 詳細が必要ですか? コード例、API テーブル、エッジケースを含む完全なリファレンスについては、references/full.mdを読み込んでください。
コメント
Markdown 対応