Llamo a getNextPos desde la función de solución y obtengo val, pos y dir. Pero mi caso de prueba está fallando "No se puede espiar la propiedad getNextPos porque no es una función; en su lugar, no está definida". Solo quiero probar una función de otra función y los valores de retorno. Aquí está el archivo app.js
function getNextPos(grid, currPos, currDir, move) { const nextDir = nextDirMap[currDir][move]; const [r, c] = currPos; const maxRowLength = grid.length-1; const maxColLength = grid[0].length-1; switch (nextDir) { case "north": { if (r <= 0) { cost = cost + (uncleardSquare * 3); throw new CustomException("Unable to move, there is an attempt to navigate beyond the boundaries of the site."); } return { val: grid[r - 1][c], pos: [r - 1, c], dir: "north" }; } } function solution(grid, index, direction, bulldozerMove) { div.innerText = ""; let currPos = index; let currDir = direction; bulldozerMove = bulldozerMove.toLowerCase(); let { val, pos, dir } = getNextPos(grid, currPos, currDir, bulldozerMove); }
Aquí está el archivo app.test.js
const { getNextPos, solution} = require('./app'); const grid = [ ["r", "o", "t", "t"], ["o", "r", "o", "t"], ["o", "o", "o", "t"], ]; describe("solution function", () => { test('should call getNextPos', () => { const spy = jest.spyOn(solution, 'getNextPos'); const isCalled = solution.getNextPos(); expect(spy).toHaveBeenCalled(); expect(isCalled).toBe(true); spy.mockRestore(); }) })
Parece que te estás burlando/espiando getNextPos
dentro del objeto de la solution
, pero de hecho, la solution
no es un objeto, es una función.
Por ejemplo:
// calc.js const calc = { sum: (n1, n2) => n1 + n2 } module.exports = { calc }
luego en un archivo de prueba:
import { calc } from './calc.js' const sumSpy = jest.spyOn(calc, 'sum') it('should pass because calc.sum has been mocked', () => { sumSpy.mockReturnValue(20); expect(calc.sum(5, 5)).toBe(20) })
eso funciona correctamente porque estoy espiando una función dentro de un objeto. Tal vez puedas hacer un refactor para mover cosas para separarlas en objetos.