如何存根新的Worker()

时间:2018-07-16 10:12:51

标签: javascript unit-testing assert sinon

我编写了一个函数,该函数创建具有限制的工作程序,并创建工作程序队列,当队列中的插槽空闲时将创建该队列。

这是方法

export function getWorker(path: string): Promise<Worker> {
    return new Promise((resolve, reject) => {
        if (pool.length < limit) {
            const worker = new Worker(path)
            pool.push(worker)
            resolve(worker)
        } else {
            queue.push({
                resolve,
                path
            })
        }
    })
}

我要测试此方法所创建的工人人数是否不超过限制。 我正在使用SinonJS。

我的问题是:有没有办法对new Worker()进行存根并在测试中添加诸如assert.callCount(myStub, limit)之类的东西?

或者也许有更好的方法来测试已经创建了多少工人?

1 个答案:

答案 0 :(得分:0)

您只需sinon.stub(window, 'Worker')

为此,您可以在window.Worker.callCount或任何其他sinon间谍指示器上进行断言。如果希望一些经过测试的代码可以调用这些工作程序中的方法,则可能还需要为此新存根定义原型。

请记住测试后的window.Worker.restore

(请注意,window.Worker仅在浏览器环境中定义,在Node env中,您必须创建伪造的global.Worker构造函数,并在global中将sinon.stub用作“容器”致电)