【问题标题】:Mocking/Stubbing CosmosDB connection to perform unit testing node js模拟/存根 CosmosDB 连接以执行单元测试节点 js
【发布时间】:2021-05-20 21:59:50
【问题描述】:

我正在寻找可以用来模拟与 Azure 的连接以执行单元测试的任何方法。有没有好的可靠的模拟 npm 模块可用。

【问题讨论】:

    标签: node.js unit-testing mocking azure-cosmosdb


    【解决方案1】:

    我正在走这条路来模拟 cosmo 客户端和 db 容器。

    jest.mock('@azure/cosmos', () => {
    return {
        CosmosClient: jest.fn(() => ({
            database: jest.fn(() => ({
                container: jest.fn(() => ({
                    items: {
                        query: jest.fn(() => ({
                            fetchAll: jest.fn(() => ({
                                resources: [{ cat: 'dog' }],
                            })),
                        })),
                    },
                })),
            })),
        })),
    }
    

    用于模拟以下内容

    const client: CosmosClient = new CosmosClient('...')
    const database: Database = client.database('...')
    const container: Container = database.container('...')
    
    const querySpec = {
        query: `SELECT * from ...`,
    }
    
    const response: Model[] = await (
            await container.items.query(querySpec).fetchAll()
        ).resources
    

    【讨论】:

      【解决方案2】:

      Jest is a general purpose JavaScript testing framework。它提供了几种不同的方法来在模块/导入级别以及单个函数中进行模拟。还有其他选项,例如 Sinon 进行模拟,但我发现 Jest 拥有开箱即用的一切。

      【讨论】:

      • 谢谢,我会调查的。我的大部分单元测试都是使用 sinon、mocha 完成的。我将检查如何将其融入我需要实现的目标。
      • 如果您已经在使用 Sinon,那么您应该能够模拟您与 CosmosDB 的交互
      • 我在模拟这段代码时遇到了问题。如果您对此有任何想法,那将很有帮助let DocumentDBClient = require('documentdb').DocumentClient; let docDbClient = new DocumentDBClient(config.COSMOS_DB.HOST, { masterKey: config.COSMOS_DB.AUTH_KEY });
      猜你喜欢
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 2015-09-03
      • 2014-03-29
      相关资源
      最近更新 更多