mcpField
R
roblox-testing

roblox-testing

github.com/tabooharmonyテスト・品質150145 回インストール2 週間前に更新
リポジトリ

roblox-testing について

Roblox 開発者が Luau のユニットテストや統合テストを書くためのスキルです。TestEZ、サービスのモック、依存性注入、Lune を使った CI/CD を扱います。

主な機能

  1. 01TestEZ のテスト構成とアサーション
  2. 02依存性注入によるテスト容易性
  3. 03Roblox サービスとシグナルのモック
  4. 04Lune ベースの CI/CD パイプライン
  5. 05テストの優先順位と注意点

活用シーン

  1. 01TestEZ による Luau モジュールのテスト
  2. 02DataStore や RemoteEvent のモック
  3. 03Lune による CI でのテスト実行
  4. 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
テストの優先順位
  1. DataStore の保存/読み込みのラウンドトリップ(データ損失を防止)
  2. マネタイズの ProcessReceipt(冪等性)
  3. コア計算(ダメージ、バフ、経済)
  4. サーバーの検証(リモートの悪用)
注意点
  • 状態をリセットするには beforeEach を使用します。ロジック内で game:GetService() を呼び出してはいけません。
  • テストは実行順に依存しないようにします。CI にはモックが必要です。wally.lock をコミットしてください。 詳細が必要ですか? コード例、API テーブル、エッジケースを含む完全なリファレンスについては、references/full.md を読み込んでください。

コメント