Как очистить макет модуля между тестами в одном и том же наборе тестов в Jest? - PullRequest
0 голосов
/ 28 сентября 2018

Я смоделировал некоторые модули 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

Кто-нибудь знает, что я делаю не так?Как очистить макет модуля между тестами в одном наборе?Я с удовольствием уточню, если это необходимо.Спасибо!

1 Ответ

0 голосов
/ 29 сентября 2018

Сбросьте модули и потребуйте их снова для каждого теста:

describe("initializes script", () => {
    afterEach(() => {
        jest.resetModules() 
    });    

    beforeEach(() => {
        jest.mock("fs");
    })

    test("it checks for a package.json in current directory", () => {
        const init = require("../init");
        init();
    });

    test("it stops script if there's a package.json in dir", () => {
        const init = require("../init");
        init();
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...