mock.verify () не проходит тест - если вызывается из обратного вызова Promise - PullRequest
0 голосов
/ 10 октября 2019

Этот вопрос очень похож на тот, который здесь: https://github.com/sinonjs/sinon/issues/2138

Я буду использовать тот же пример:

it("test case 100", () => {
    return getPromiseA().then((A1) => {
        const mock1 = sinon.mock(MyObject);
        mock1.expects("someMethod").twice();
        A1.getPromiseB("1234").then((response) => {
            mock1.restore();
            mock1.verify();
        }).catch((error) => {
            console.log("+++--- (Error) END of testCase +++++");
        }
    }, (rejectedP) => {
    }).catch((err) => {
        console.log("-------- (REJ-C) END of testCase ++++");
    });
});

Строка кода: mock1.expects("someMethod").twice(); долженошибка при вызове mock1.verify();. При нормальных обстоятельствах mock1.verify(); сгенерирует исключение, и контрольный пример провалится.

Но в приведенном выше примере контрольный пример не завершится неудачей. В консоли браузера выдается сообщение об ошибке - вот и все.

Исправление для этого заключается в том, что контрольный пример ДОЛЖЕН завершиться неудачей. Есть идеи?

1 Ответ

0 голосов
/ 14 октября 2019

Понял, это может немного запутать при использовании цепных обещаний. Вот что можно сделать:

it("test case 100", () => {
    let mock1 = null;
    return getPromiseA().then((A1) => {
        mock1 = sinon.mock(MyObject);
        mock1.expects("someMethod").twice();
        return A1.getPromiseB("1234");
    }).then(() => {
        // response from "A1.getPromiseB"
        mock1.restore();
        mock1.verify();
    });
// No need for catch, since the error will be caught and reported as failure by Sinon.
});

Это решило проблему, с которой я столкнулся.

...