Lorcana Test Generation
Generate test files for Lorcana card definitions using LorcanaTestEngine.
When to Use
- •User requests to generate tests for a card
- •After card migration is complete
- •User wants to update existing tests
- •User asks to test a specific ability
Process
Input
Card File: Path to card definition (e.g., src/cards/001/characters/007-heihei-boat-snack.ts)
Workflow
- •
Read Card Definition
- •Load card file from
src/cards/001/ - •Extract abilities array
- •Load card file from
- •
Identify Ability Types
- •Keyword: Simple presence check
- •Triggered: When/whenever triggers
- •Activated: Cost → effect abilities
- •Static: Continuous effects
- •
Generate Tests (Interactive)
- •For each ability: show template, ask for confirmation
- •User can: generate, skip, or customize
- •Compile confirmed tests into single file
- •
Write Test File
- •Create at same location as card:
{file}.test.ts - •Use
LorcanaTestEngineandPLAYER_ONEfrom@tcg/lorcana/testing
- •Create at same location as card:
Test Templates
Keyword Test
typescript
it("has [Keyword] keyword", () => {
const testEngine = new LorcanaTestEngine({ play: [cardUnderTest] });
const card = testEngine.getCardModel(cardUnderTest);
expect(card.hasKeyword()).toBe(true);
});
Triggered Test (When You Play)
typescript
it("triggers effect when played", () => {
const testEngine = new LorcanaTestEngine({ hand: [cardUnderTest] });
const before = testEngine.getZone("hand", PLAYER_ONE).length;
testEngine.playCard(cardUnderTest.id);
const after = testEngine.getZone("hand", PLAYER_ONE).length;
expect(after).toBe(before + 1); // Drew 1, played 1
});
Activated Test
typescript
it("activates ability when cost is paid", () => {
const testEngine = new LorcanaTestEngine({ play: [cardUnderTest] });
// Exert to activate
testEngine.quest(cardUnderTest.id);
const state = testEngine.getCardMeta(cardUnderTest.id);
expect(state?.state).toBe("exerted");
});
What NOT to Test
Do NOT test property values (cost, strength, willpower, lore, cardNumber, etc.) - these are data, not behavior.
Output Format
code
Test Generation Complete ======================== Card: [Name] - [Version] File: src/cards/001/characters/xxx-name.test.ts Tests Generated: X - Keywords: Y - Triggered: Z - Activated: W - Skipped: V Run Tests: bun test src/cards/001/characters/xxx-name.test.ts
Example Session
code
> write-card-test 007-heihei-boat-snack Reading card: src/cards/001/characters/007-heihei-boat-snack.ts Found 1 ability [Ability 1/1: Keyword - Support] Test: hasSupport() verification Generate test? (yes/no/customize) yes ✓ Test file created File: src/cards/001/characters/007-heihei-boat-snack.test.ts Run: bun test src/cards/001/characters/007-heihei-boat-snack.test.ts
Completion Report
code
Test Generation: Complete ======================== File: src/cards/001/characters/xxx-name.test.ts Tests: X generated Next Steps: - Run: bun test src/cards/001/characters/xxx-name.test.ts - Verify all tests pass - Commit changes