Estuve pensando mucho en QUÉ probar en un método que funciona como un "orquestador" y su único trabajo es llamar a funciones. Así que tengo esta clase BattleInteractor
class BattleInteractor { constructor(opts) { this.battleRepository = opts.battleRepository this.battleEntity = opts.battleEntity this.battleWinner = opts.battleWinner this.typeFactoryService = opts.typeFactory } async execute(pokemonOne, pokemonTwo) { const battleResult = this.battle(pokemonOne, pokemonTwo) return battleResult } battle(pokemonOne, pokemonTwo) { const strategy = this.typeFactoryService.getStrategy(pokemonOne, pokemonTwo) const pokemonsSetted = strategy.setStats(pokemonOne, pokemonTwo) const battleResult = this.battleEntity.battleLogic(pokemonsSetted) return this.battleWinner.battleWinner(battleResult) } } module.exports = BattleInteractorY el archivo de prueba con todos los métodos burlados:
const BattleInteractor = require('../../../../src/application/useCases/battle/battleInteractor') describe('BattleInteractor test', () => { const pokemonOneMock = 'mock' const pokemonTwoMock = 'mock' const battleWinnerMock = 'mock' class TypeMock { setStats() { return 'mockStats' } } const battleInteractor = new BattleInteractor({ battleRepository: { savedDatabase: () => true }, typeFactory: { getStrategy: () => { return new TypeMock() }, }, battleEntity: { battleLogic: () => { return "battleLogicMock" } }, battleWinner: { battleWinner: () => { return battleWinnerMock } }, }) test.only('Should return properties formatted', async () => { const res = await battleInteractor.execute(pokemonOneMock, pokemonTwoMock) expect(res.message).toBe("carnivine and naganadel have tied") }) })Todo funciona bien, así que tengo algunas preguntas: ¿Qué debo probar en un método como este? ¿Es esta una prueba unitaria o una prueba de integración? ¿Qué tan necesario es probar una clase/método como este?