Я смоделировал некоторые модули nodejs (например, один из них - fs
).У меня они есть в папке __mocks__
(того же уровня als node_modules
), и модуль работает с насмешками.Тем не менее, какой бы вариант «между очисткой теста» я не использовал, следующий тест не будет помещен в «песочницу».Что здесь не так?
Очень упрощенный пример модуля fs
:
// __mocks__/fs.js
module.exports = {
existsSync: jest.fn()
.mockReturnValueOnce(1)
.mockReturnValueOnce(2)
.mockReturnValueOnce(3)
}
Я просто ожидаю, что в каждом тесте всякий раз, когда вызывается init()
(см. ниже), existsSync
начинается снова со значения 1: первое значение jest.fn().mockReturnValue()
.В тестовом файле у меня следующая структура:
// init.test.js
const init = require("../init");
const { existsSync } = require("fs");
jest.mock("fs");
describe("initializes script", () => {
afterEach(() => {
// see below!
});
test("it checks for a package.json in current directory", () => {
init();
});
test("it stops script if there's a package.json in dir", () => {
init(); // should be run in clean environment!
});
}
И еще раз очень упрощенно, файл init.js
const { existsSync } = require("fs");
console.log("value of mocked response : ", existsSync())
Я получаю следующие результаты для existsSync()
послепервый и второй запуск init()
соответственно при запуске в afterEach()
:
- jest.resetModules ():
1
, 2
- existSync.mockReset ():
1
, undefined
- existSync.mockClear ():
1
, 2
- existSync.mockRestore ():
1
, undefined
Кто-нибудь знает, что я делаю не так?Как очистить макет модуля между тестами в одном наборе?Я с удовольствием уточню, если это необходимо.Спасибо!