mock.verify()不会通过测试-如果从Promise回调中调用

时间:2019-10-10 14:36:23

标签: javascript es6-promise sinon

此问题与此处的问题非常相似: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 :(得分:0)

知道了,使用链接的诺言时可能会造成一些混乱。这是可以做的:

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.
});

这解决了我面临的问题。