摩卡伪造第二个方法调用

Mocha faking second method call

我有一个包含嵌套 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那么一个进程被执行并且私有方法是运行第二次以确保进程运行成功。

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

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

有人能给我指出正确的方向吗?

谢谢。

啊啊啊,我找到了:)

sinon,从版本 1.8 开始,有一个 onCall 方法。