摩卡伪造第二种方法调用

时间:2019-01-25 17:30:53

标签: javascript mocha sinon

我有一个带有嵌套If-Then语句的方法。

被测方法两次调用 second 方法。

类似几乎的东西(非常简化):

module.exports = {
    method_under_test: async function () {
        let stat = await privateMethod();

        if (stat == 0) { return true; }
        else if (stat == 1) { return false; }
        else if (stat == 2) {
            doSomething();

            stat = await privateMethod();
            if (stat == 0) { return true; }
            else { return false; }
        }
        else { return false; }
    }
}

function privateMethod() {
    return new Promise((resolve, reject) => {
        doAsync((rep) => {
            if (rep) {
                if (rep === 'something') { resolve(0); }
                else { resolve(1); }
            } else {
                resolve(2);
            }
        });
    });
}

请注意,如果stat == 2,则将执行一个进程,并再次运行private方法以确保该进程成功运行。

注意:我无法在自己的私有方法中更改doAsync方法。我所能做的就是解释结果。

所以,我的问题是...我想伪造我的privateMethod,以便在第一次调用时返回2,而在第二次调用时返回1,并允许我测试嵌套的If-Else的else部分。

有人可以指出正确的方向吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

啊,我找到了:)

sinon(从1.8版开始)具有onCall方法。