【发布时间】:2020-10-24 15:43:37
【问题描述】:
我正在尝试开玩笑并编写单元测试。 我已经为几个函数编写了单元测试。这些函数使用从不同文件导入的常量对象。所以我模拟了这些常量。
describe('testing helpers', () => {
beforeEach(() => jest.resetModules());
describe('reset board', () => {
// first test using original constant values
test('with default constants', () => {
const game = {
board: [
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0]
],
count: 0
};
const helper = require('./helper');
expect(helper.resetBoard()).toEqual(game);
});
// second test using mocked constant values
test('reset board', () => {
const game = {
board: [
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]
],
count: 0
};
jest.mock("./constants", () => ({ ROWS: 4, COLUMNS: 5 }));
const helper = require('./helper');
expect(helper.resetBoard()).toEqual(game);
});
});
describe('make move', () => {
// third test with original constant values
test('player 1 move', () => {
const testBoard = [
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0]
];
const testTurn = 'YELLOW';
const testColumn = 0;
const expectedBoard = [
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0]
];
const helper = require('./helper');
helper.makeMove(testBoard, testTurn, testColumn);
expect(testBoard).toEqual(expectedBoard);
});
});
});
但是当第二个描述块中的第三个测试运行时,它会选择模拟值而不是原始值。我认为这个beforeEach(() => jest.resetModules()); 会重置模拟值,但它不起作用。
请帮助解决这个问题。
任何其他改进测试的提示将不胜感激。
【问题讨论】:
-
@EstusFlask 是的,给你repl.it/repls/AdmirableQueasyFlashdrives
标签: javascript unit-testing jestjs mocking