У меня проблема, когда шутка не очищает состояние между тестами. Я попытался позвонить restoreAllMocks()
в beforeEach()
и afterEach()
, и это не очистило мою заглушку jest.spyOn(x, 'y').mockImplementation()
. Я также попробовал clearAllMocks()
и resetAllMocks()
, не повезло.
Мой модуль c:
function mockFeatureFlag(flagToMock: Flag) {
jest.spyOn(FeatureFlags, 'singleton').mockImplementation(
() =>
({
getFeatureFlag: (flag: Flag) =>
new Promise(resolve => {
if (flag === flagToMock) {
resolve(true);
} else {
resolve(false);
}
}),
} as any),
);
}
describe('bufferMinutesForDistance', () => {
it('for small distances uses min buffer of 3h', async () => {
const minutes = await util.bufferMinutesForDistance(1);
expect(minutes).toBe(3 * 60);
});
it('for small distances when HALF_GHOST_BUFFER flag is true uses min buffer of 3h', async () => {
mockFeatureFlag(Flag.HALF_GHOST_BUFFER);
const minutes = await util.bufferMinutesForDistance(1);
expect(minutes).toBe(3 * 60);
});
it('for long distances uses 12h buffer', async () => {
const minutes = await util.bufferMinutesForDistance(1000);
expect(minutes).toBe(12 * 60);
});
it('for long distances when HALF_GHOST_BUFFER flag is true cuts 12h buffer by half', async () => {
mockFeatureFlag(Flag.HALF_GHOST_BUFFER);
const minutes = await util.bufferMinutesForDistance(1000);
expect(minutes).toBe(6 * 60);
});
});
Здесь есть 4 теста. В тестах 1 и 3, где я явно не издеваюсь, чтобы флаг функции возвращал значение true, я ожидаю, что он вернет false (по умолчанию флаги функции имеют значение false). Здесь я вызываю mockImplementation
, чтобы флаг функции возвращал значение true в тесте 2. Однако при запуске тестов я вижу, что флаг также возвращает значение true в тесте 3. Я не ожидал этого, поскольку это означает, что состояние шпиона просачивается между тестами.
Как я могу предотвратить утечку состояния шутки между тестами?