javascript - 如何 stub new Worker()

标签 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
            })
        }
    })
}

我想测试这个方法不会创建超过限制的 worker 。 我正在使用 SinonJS。

我的问题是:有没有办法对 new Worker() 进行 stub ,并在我的测试中加入类似 assert.callCount(myStub, limit) 的东西?

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

最佳答案

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

因此,您可以断言 window.Worker.callCount 或任何其他 sinon spy 指标。如果您希望一些经过测试的代码调用这些工作程序上的方法,您可能还想为这个新 stub 定义原型(prototype)。

在测试后记住 window.Worker.restore

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

关于javascript - 如何 stub new Worker(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51359435/

相关文章:

.net - 如何使用 NUnit(或者可能使用其他框架)测试异步方法?

c# - Assert.AreEqual 对于没有增量的 float

javascript - AngularJS;模型数据未在 html 表中列出

javascript - 当用户滚动到元素上方 50px 时向元素添加类?

javascript - jquery - 使用 .closest()

perl 防御性编程 (die, assert, croak)

C++ 断言消息

javascript - 为什么我的 Kendo Grid 的模型计算字段显示函数的代码?

mysql - 提高在 Django 中创建 MySQL 表的速度?

javascript - 我如何在 Sinon 中存入一系列方法?