Javascript Jest:如何测试调用身体中另一个函数的函数
我正在尝试测试makeRandomComputerMove函数,但是,我无法使用Jest正确模拟从同一模块导出的getRandomNumber函数 如果我在测试文件中直接调用getRandomNumber函数,它会按预期工作,但我的印象是,在测试文件中模拟函数应该强制内部makeRandomComputerMove函数使用模拟值 任何帮助都将不胜感激 test.ticTacToe.jsJavascript Jest:如何测试调用身体中另一个函数的函数,javascript,testing,random,jestjs,Javascript,Testing,Random,Jestjs,我正在尝试测试makeRandomComputerMove函数,但是,我无法使用Jest正确模拟从同一模块导出的getRandomNumber函数 如果我在测试文件中直接调用getRandomNumber函数,它会按预期工作,但我的印象是,在测试文件中模拟函数应该强制内部makeRandomComputerMove函数使用模拟值 任何帮助都将不胜感激 test.ticTacToe.js describe('TicTacToe Utils', () => { const random
describe('TicTacToe Utils', () => {
const randomMock = jest.spyOn(Utils, 'getRandomNumber')
.mockReturnValueOnce(0)
.mockReturnValueOnce(1)
const board = [
[['X'], [], []],
[[], [], []],
[[], [], []]
]
it('makeRandomComputerMove', () => {
const location = Utils.makeRandomComputerMove(board)
// expect(location.x).toBe(0)
// expect(location.y).toBe(1)
})
})
export const getRandomNumber = (min, max) => {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
export const makeRandomComputerMove = (board) => {
const location = {};
location.x = getRandomNumber(0, board.length - 1);
location.y = getRandomNumber(0, board.length - 1);
if (location.x < 3 && location.y < 3) {
return location
}
return makeRandomComputerMove(board);
};
ticTacToe.js
describe('TicTacToe Utils', () => {
const randomMock = jest.spyOn(Utils, 'getRandomNumber')
.mockReturnValueOnce(0)
.mockReturnValueOnce(1)
const board = [
[['X'], [], []],
[[], [], []],
[[], [], []]
]
it('makeRandomComputerMove', () => {
const location = Utils.makeRandomComputerMove(board)
// expect(location.x).toBe(0)
// expect(location.y).toBe(1)
})
})
export const getRandomNumber = (min, max) => {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
export const makeRandomComputerMove = (board) => {
const location = {};
location.x = getRandomNumber(0, board.length - 1);
location.y = getRandomNumber(0, board.length - 1);
if (location.x < 3 && location.y < 3) {
return location
}
return makeRandomComputerMove(board);
};
当makeRandomComputerMove在同一文件中调用getRandomNumber时,您将无法模拟它
相反,您可以将getRandomNumber移动到一个单独的文件中,然后可以模拟该文件:
getRandomNumber.js
ticTacToe.js
describe('TicTacToe Utils', () => {
const randomMock = jest.spyOn(Utils, 'getRandomNumber')
.mockReturnValueOnce(0)
.mockReturnValueOnce(1)
const board = [
[['X'], [], []],
[[], [], []],
[[], [], []]
]
it('makeRandomComputerMove', () => {
const location = Utils.makeRandomComputerMove(board)
// expect(location.x).toBe(0)
// expect(location.y).toBe(1)
})
})
export const getRandomNumber = (min, max) => {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
export const makeRandomComputerMove = (board) => {
const location = {};
location.x = getRandomNumber(0, board.length - 1);
location.y = getRandomNumber(0, board.length - 1);
if (location.x < 3 && location.y < 3) {
return location
}
return makeRandomComputerMove(board);
};
我希望这有帮助