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/

相关文章:

javascript - 如何在shopify的首发主题中调用/cart/update.js

javascript - 将 CSS 应用于脚本

javascript - 如何使用 jest 测试 setTimeout 和 jquery 方法

Java - TestNG : Is It Wrong to use testng Assert. catch block 中的 fail()

javascript - 编译后的 JavaScript 文件应该提交给 Git 仓库吗?

javascript - 如何在街景 map 中添加搜索选项我的谷歌地图插件

python - 加速 Django 测试

java - 如何在SonarQube 6.7中分析单元测试文件?

selenium - IRetryAnalyzer 为定义为 SoftAssert 的测试用例生成不正确的结果

java - JUnit:是否可以在任何断言函数中输出多行消息?