refactor: 消除 engine.ts 重复 break 和 evolution.test.ts 的 as any

- engine.ts: 移除 switch case 中多余的 break 语句
- evolution.test.ts: 用完整 Creature 对象替代 as any 类型转换

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
claude-code-best
2026-04-22 04:40:59 +08:00
parent 4b23bcd3eb
commit 363ba39cad
2 changed files with 43 additions and 11 deletions

View File

@@ -1,14 +1,41 @@
import { describe, test, expect } from 'bun:test'
import type { Creature } from '../types'
import { checkEvolution, evolve, canEvolveFurther } from '../core/evolution'
function makeEvolutionCreature(overrides: Partial<Creature> = {}): Creature {
return {
id: 'test-evo',
speciesId: overrides.speciesId ?? 'bulbasaur',
gender: 'male',
level: overrides.level ?? 50,
xp: 0,
totalXp: 0,
nature: 'hardy',
ev: { hp: 0, attack: 0, defense: 0, spAtk: 0, spDef: 0, speed: 0 },
iv: { hp: 31, attack: 31, defense: 31, spAtk: 31, spDef: 31, speed: 31 },
moves: [
{ id: 'tackle', pp: 35, maxPp: 35 },
{ id: 'growl', pp: 40, maxPp: 40 },
{ id: 'vinewhip', pp: 15, maxPp: 15 },
{ id: 'razorleaf', pp: 10, maxPp: 10 },
],
ability: 'overgrow',
heldItem: null,
friendship: overrides.friendship ?? 70,
isShiny: false,
hatchedAt: Date.now(),
pokeball: 'pokeball',
}
}
describe('checkEvolution', () => {
test('bulbasaur at level 15 cannot evolve', () => {
const creature = { speciesId: 'bulbasaur' as const, level: 15, friendship: 70 } as any
const creature = makeEvolutionCreature({ speciesId: 'bulbasaur', level: 15 })
expect(checkEvolution(creature)).toBeNull()
})
test('bulbasaur at level 16 can evolve into ivysaur', () => {
const creature = { speciesId: 'bulbasaur' as const, level: 16, friendship: 70 } as any
const creature = makeEvolutionCreature({ speciesId: 'bulbasaur', level: 16 })
const result = checkEvolution(creature)
expect(result).not.toBeNull()
expect(result!.from).toBe('bulbasaur')
@@ -16,41 +43,41 @@ describe('checkEvolution', () => {
})
test('charmander at level 16 evolves into charmeleon', () => {
const creature = { speciesId: 'charmander' as const, level: 16, friendship: 70 } as any
const creature = makeEvolutionCreature({ speciesId: 'charmander', level: 16 })
const result = checkEvolution(creature)
expect(result!.to).toBe('charmeleon')
})
test('charmeleon at level 36 evolves into charizard', () => {
const creature = { speciesId: 'charmeleon' as const, level: 36, friendship: 70 } as any
const creature = makeEvolutionCreature({ speciesId: 'charmeleon', level: 36 })
const result = checkEvolution(creature)
expect(result!.to).toBe('charizard')
})
test('squirtle at level 16 evolves into wartortle', () => {
const creature = { speciesId: 'squirtle' as const, level: 16, friendship: 70 } as any
const creature = makeEvolutionCreature({ speciesId: 'squirtle', level: 16 })
const result = checkEvolution(creature)
expect(result!.to).toBe('wartortle')
})
test('wartortle at level 36 evolves into blastoise', () => {
const creature = { speciesId: 'wartortle' as const, level: 36, friendship: 70 } as any
const creature = makeEvolutionCreature({ speciesId: 'wartortle', level: 36 })
const result = checkEvolution(creature)
expect(result!.to).toBe('blastoise')
})
test('venusaur cannot evolve further', () => {
const creature = { speciesId: 'venusaur' as const, level: 50, friendship: 70 } as any
const creature = makeEvolutionCreature({ speciesId: 'venusaur', level: 50 })
expect(checkEvolution(creature)).toBeNull()
})
test('pikachu cannot evolve in MVP', () => {
const creature = { speciesId: 'pikachu' as const, level: 50, friendship: 70 } as any
const creature = makeEvolutionCreature({ speciesId: 'pikachu', level: 50 })
expect(checkEvolution(creature)).toBeNull()
})
test('level 100 bulbasaur can still evolve (level >= minLevel)', () => {
const creature = { speciesId: 'bulbasaur' as const, level: 100, friendship: 70 } as any
const creature = makeEvolutionCreature({ speciesId: 'bulbasaur', level: 100 })
const result = checkEvolution(creature)
expect(result).not.toBeNull()
expect(result!.to).toBe('ivysaur')
@@ -59,11 +86,17 @@ describe('checkEvolution', () => {
describe('evolve', () => {
test('changes species and boosts friendship', () => {
const creature = { speciesId: 'bulbasaur' as const, friendship: 70, level: 16 } as any
const creature = makeEvolutionCreature({ speciesId: 'bulbasaur', friendship: 70, level: 16 })
const evolved = evolve(creature, 'ivysaur')
expect(evolved.speciesId).toBe('ivysaur')
expect(evolved.friendship).toBe(80) // +10 friendship on evolution
})
test('friendship is capped at 255', () => {
const creature = makeEvolutionCreature({ speciesId: 'bulbasaur', friendship: 250, level: 16 })
const evolved = evolve(creature, 'ivysaur')
expect(evolved.friendship).toBe(255)
})
})
describe('canEvolveFurther', () => {

View File

@@ -242,7 +242,6 @@ export function executeTurn(
p1Choice = switchIdx >= 0 ? `switch ${switchIdx + 1}` : 'move 1'
break
}
break
case 'item':
p1Choice = 'move 1' // Items handled via settlement
break