Sinon Ошибка «Попытка обернуть ... которая уже обернута» в нескольких файлах - PullRequest
1 голос
/ 03 мая 2019

У меня есть несколько файлов, использующих sinon для одного и того же метода Utils.getTimestamp.

При запуске файлов тестов по одному проходят все тесты. При одновременном запуске файлов тестов тесты завершаются неудачно с: TypeError: «Попытка обернуть уже завернутый getTimestamp»

В обоих файлах у меня есть блоки описания с блоками до и после

В блоке Before я заглушаю метод как: getTimestampStub = sinon.stub (Utils, 'getTimestamp') .returns (myTimestamp);

В блоке After я восстанавливаю метод следующим образом: getTimestampStub.restore ();

Я пробовал это в соответствии с этим ответом: https://stackoverflow.com/a/36075457/6584537

Примеры файлов:

ФАЙЛ 1

describe("First Stub", () => {
    let getTimestampStub;
    before(() => {
        getTimestampStub= sinon.stub(Utils, 'getTimestamp') .returns("SOME_TIMESTAMP");
    });

    it("Should run some code that uses getTimestamp", () => {
        // Some code that in the process uses `Utils.getTimestamp`
    });
    after(() => {
        getTimestampStub.restore();
    });
});

ФАЙЛ 2

describe("Second Stub", () => {
    let getTimestampStub;
    before(() => {
        getTimestampStub= sinon.stub(Utils, 'getTimestamp') .returns("SOME_TIMESTAMP");
    });

    it("Should run some OTHER code that uses getTimestamp", () => {
        // Some code that in the process uses `Utils.getTimestamp`
    });

    after(() => {
        getTimestampStub.restore();
    });
});

1 Ответ

2 голосов
/ 03 мая 2019

Когда Mocha запускает несколько файлов, он запускает все предыдущие блоки сначала. Это верно для 1 файла или для нескольких.

Ошибка в том, что я пытался заглушить тот же метод, прежде чем он успел быть восстановленным. Как то так:

ранее ()

он ()

before () // еще не восстановлено, вызывается второй sinon.stub? "Попытка обернуть ... который уже завернут "

он ()

после () // развернуть

after () // уже восстановлена, другая ошибка: «Восстановление не является функцией»

Тогда было решено создать заглушку в блоке Assertion, который мне был нужен. как то так:

Файл 1

describe("First Stub", () => {
    let getTimestampStub;
    before(() => {});

    it("Should Stub getTimestamp before some code needs it", () => {
        getTimestampStub= sinon.stub(Utils, 'getTimestamp') .returns("SOME_TIMESTAMP");

        // Some code that in the process uses `Utils.getTimestamp`

        getTimestampStub.restore();
    });
    after(() => {});
});

Файл 2

describe("Second Stub", () => {
    let getTimestampStub;
    before(() => {});

    it("Should Stub getTimestamp before some code needs it", () => {
        getTimestampStub= sinon.stub(Utils, 'getTimestamp') .returns("SOME_TIMESTAMP");

        // Some code that in the process uses `Utils.getTimestamp`

        getTimestampStub.restore();
    });
    after(() => {});
});
...