Gathering detailed insights and metrics for @yasshi2525/jest-environment-akashic
Gathering detailed insights and metrics for @yasshi2525/jest-environment-akashic
Gathering detailed insights and metrics for @yasshi2525/jest-environment-akashic
Gathering detailed insights and metrics for @yasshi2525/jest-environment-akashic
Sandbox of akashic environment for unit test with jest
npm install @yasshi2525/jest-environment-akashic
Typescript
Module System
Node Version
NPM Version
TypeScript (98.91%)
JavaScript (1.09%)
Total Downloads
574
Last Day
1
Last Week
6
Last Month
46
Last Year
574
MIT License
15 Commits
1 Watchers
1 Branches
1 Contributors
Updated on Jun 17, 2025
Minified
Minified + Gzipped
Latest Version
0.1.4
Package Id
@yasshi2525/jest-environment-akashic@0.1.4
Unpacked Size
27.77 kB
Size
8.71 kB
File Count
9
NPM Version
10.2.3
Node Version
20.10.0
Published on
Sep 04, 2024
Cumulative downloads
Total Downloads
Last Day
0%
1
Compared to previous day
Last Week
500%
6
Compared to previous week
Last Month
31.4%
46
Compared to previous month
Last Year
0%
574
Compared to previous year
Akashic Engine を利用したコードのユニットテスト記述・実行支援を目的に、サンドボックス環境を提供します.
本ライブラリを利用すると、Akashic Engineの機能が混在するクラス・関数に対しても個々の動作を確認しやすくなります.
例えば「自作ロジックを組み込んだ g.Sprite
のクリック時の動作」をテストコードとして記述しやすくなります.
また、動作中のスナップショットを画像出力することで、意図した通りにテストされているか目視確認もできます.
Q: どうして動作確認をテストコードとして記述するの?
A: 仕様変更時も変更していない従来のコードが正しく動作するか、目視に頼らず自動的にテストできるからです. テストを自動化することで動作確認の手間を減らし、ゲーム開発を効率的に進められます.
Q: すでにあるテスト支援ライブラリ (@akashic-games/headless-akashic
) との違いは?
A: @akashic-games/headless-akashic
を使うとAkashic Engineを用いたゲームスクリプトをテストできます.
しかし、これはゲーム全体を一からスタートさせるため、ゲームの途中部分からの動作確認や一部機能だけのテストがしづらい側面があります.
そこで、特定の処理や特定の条件下での動きといった個々の動作確認をしやすくするため、 Akashic Engineが動作する使い捨ての軽量環境を提供します. 動作環境は自動で再構築されるため、面倒な初期化処理をその都度書く必要はありません.
一方、図形や画像のレンダリングも行われるため、これを画像出力することで目視で動作確認しながらテストコードを記述できます.
akashic init
して構築したプロジェクトで、下記のコマンドを実行してください.
1npm install --dev @yasshi2525/jest-environment-akashic
jest.config.js
に下記を追記してください.
1module.exports = { 2 // ... 3 testEnvironment: "@yasshi2525/jest-environment-akashic" 4 // ... 5}
tsconfig.json
の compilerOptions.types[]
に下記を追記してください.
1{ 2 "compilerOptions": { 3 "types": [ 4 "@yasshi2525/jest-environment-akashic-global" 5 ] 6 } 7}
以上の手順で、テストコード (spec
ディレクトリ配下のコード) で下記のグローバル変数が利用できます.
g
, g.game
: 実際のAkashic Engineの実行環境のものが格納されます.scene
: 空の g.Scene
. テスト単位 (test
または it
メソッド単位) でリセットされます.
追加したエンティティやハンドラの削除処理を記述する必要はありません.screenshot(filename: string)
: 現在の画面を画像として出力します. ファイルは ./tmp/screenshot
以下に出力されます.また、ゲーム進行を制御する以下の @akashic-games/headless-akashic
の機能がグローバル変数として利用可能です.
gameContext
: GameContext<3>
gameClient
: GameClient<3>
src/button.ts
1type ButtonStatus = "ON" | "OFF"; 2 3/** 4 * 押下すると ON, 離すと OFF になるボタン 5 */ 6export class Button extends g.FilledRect { 7 private _status: ButtonStatus = "OFF"; 8 constructor(opts: g.FilledRectParameterObject) { 9 super(opts); 10 // 押下されると ON 11 this.onPointDown.add(() => this.on()); 12 // 離されると OFF 13 this.onPointUp.add(() => this.off()); 14 } 15 16 /** 17 * ON状態にします 18 */ 19 on(): void { 20 this._status = "ON"; 21 this.opacity = 0.5; 22 this.modified(); 23 } 24 25 /** 26 * OFF状態にします 27 */ 28 off(): void { 29 this._status = "OFF"; 30 this.opacity = 1; 31 this.modified(); 32 } 33 34 /** 35 * ボタンの状態を取得します 36 */ 37 get status(): string { 38 return this._status; 39 } 40}
1import {Button} from "../src/button"; 2 3describe("button", () => { 4 it ("on()を実行するとON状態になる", async () => { 5 const button = new Button({ scene, width: 100, height: 100, cssColor: "red", touchable: true }); 6 scene.append(button); 7 await gameContext.step(); 8 button.on(); 9 expect(button.status).toEqual("ON"); 10 await gameContext.step(); 11 screenshot("on.png"); 12 }); 13 it("off()を実行するとOFF状態になる", async () => { 14 const button = new Button({ scene, width: 100, height: 100, cssColor: "red", touchable: true }); 15 scene.append(button); 16 await gameContext.step(); 17 button.on(); 18 button.off(); 19 expect(button.status).toEqual("OFF"); 20 await gameContext.step(); 21 screenshot("off.png"); 22 }); 23 it("押下するとON状態になる", async () => { 24 const button = new Button({ scene, width: 100, height: 100, cssColor: "red", touchable: true }); 25 scene.append(button); 26 await gameContext.step(); 27 gameClient.sendPointDown(50, 50, 1); 28 await gameContext.step(); 29 expect(button.status).toEqual("ON"); 30 await gameContext.step(); 31 screenshot("down.png"); 32 }); 33 it("離すとOFF状態になる", async () => { 34 const button = new Button({ scene, width: 100, height: 100, cssColor: "red", touchable: true }); 35 scene.append(button); 36 await gameContext.step(); 37 gameClient.sendPointDown(50, 50, 1); 38 await gameContext.step(); 39 gameClient.sendPointUp(50, 50, 1); 40 await gameContext.step(); 41 expect(button.status).toEqual("OFF"); 42 await gameContext.step(); 43 screenshot("up.png"); 44 }); 45});
jest.config.js
に下記を追記することで、設定を変更することができます.
1module.exports = { 2 // ... 3 testEnvironmentOptions: { 4 screenshotDir: "<スクリーンショットの出力先>", // 任意, デフォルト値 "./tmp/screenshot" 5 } 6 // ... 7}
テスト実行時まれに(強制終了時などのタイミングで)下記のファイルが残存します.
もう一度テストを実行すると削除されるので、恐れ入りますがファイル残存時は再テスト実行をお願いします.
1.main.fake-*.js 2.game.fake-*.json
@yasshi2525 (X)
MIT License
No vulnerabilities found.
No security vulnerabilities found.