用 createMockPlatform 測試
目前每一個整合測試都需要完整的 Postgres/Redis/platform/operator 環境跑起來。createMockPlatform 是平台錢包/RGS 端點的可簽名記憶體模擬實作,可以讓你的 ProviderClient 程式碼完全不需要網路就能跑起來。
ts
import { createMockPlatform, ProviderClient } from '@moose/provider-sdk'
const mock = createMockPlatform({ secret: 'test-secret', tenantId: 'acme-studio' })
mock.registerSession({
sessionToken: 'sess-1',
playerRef: 'player-1',
gameId: 'book-of-acme',
operatorId: 'acme-casino',
currency: 'USD',
config: { rtpProfile: 'RTP_96_0', minBetMinor: 100, maxBetMinor: 10000, language: 'en' },
balanceMinor: 100000,
})
const client = new ProviderClient({
baseUrl: 'http://mock',
tenantId: 'acme-studio',
secret: 'test-secret',
fetch: mock.fetch, // 這就是注入點——ProviderClient 的其他部分完全不變
})
const session = await client.verifySession('sess-1') // 對應到上面註冊的記憶體 session
const bet = await client.submitTransaction({ transactionId: crypto.randomUUID(), sessionToken: 'sess-1', type: 'BET', roundId: crypto.randomUUID(), roundComplete: false, playerRef: session.playerRef, amount: 500, currency: session.currency, gameId: session.gameId })它會真的針對你給的 secret 驗證請求簽名——用錯誤金鑰的客戶端打這個模擬平台,一樣會得到真正的 401,跟打正式平台的行為一致,所以你整合程式碼裡的簽名錯誤在這裡就會現形,不會被默默放行。它也在簡化的程度上模擬了錢包契約:餘額不足或下注超出 minBetMinor/maxBetMinor 時回 DECLINED,以及對已經見過的 transactionId 做冪等重放、不會重複扣款。
這是給你自己的整合測試用的,不能取代上線前對真實平台的測試——SDK 的 examples/smoke.ts 是一個對正在運行的平台實例做的真實端對端連通性檢查,上線檢查清單則涵蓋了上線前還需要確認的其他事項。
這個模擬平台驗證了什麼,沒驗證什麼
| 行為 | 是否模擬 |
|---|---|
針對你傳入的 secret 驗證簽名 | 是——金鑰錯誤一樣會回 401,和真實平台一致 |
餘額不足或下注超出限額時回 DECLINED | 是,簡化層級的模擬 |
對已見過的 transactionId 做冪等重放 | 是——不會重複扣款 |
| 限流、金鑰輪替寬限期、nonce 重放偵測 | 否 |
| Session 撤銷/免費旋轉回呼(平台 → 廠商方向) | 否——這些是你的伺服端接收的呼叫,不是 ProviderClient 發出的;請直接用 verifyPlatformSignature 測試你自己的回呼處理程式 |
| Central Config 解析的細節(RTP 設定檔目錄、依運營商的覆寫規則) | 否——registerSession 的 config 就是你傳入的值 |
完整參考
createMockPlatform 確切的 MockPlatformOptions 和 MockPlatform 型別,見 @moose/provider-sdk 參考文件的離線模擬平台章節。