Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

743
Visualizações
Jest se burla de las funciones anidadas de MongoDB

Tengo una clase auxiliar que administra los métodos de cliente de MongoDB.

 class Common { constructor() { this._client = null; } static async connect(url) { this._client = await MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true, }); return this._client; } static async getCollection({ url, db_name, collection_name }) { const client = await Common.connect(url); return client.db(db_name).collection(collection_name); } }

Estoy tratando de escribir el caso de prueba para el método getCollection. Esto es lo que probé

 jest.mock('mongodb'); it('To check if the collection method on the MongoClient instance was invoked', () => { Common.getCollection({}); const mockMongoClientInstance = MongoClient.mock.instances[0]; const mockMongoDBConnect = mockMongoClientInstance.connect; expect(mockMongoDBConnect).toHaveBeenCalledTimes(1); });

Obviamente, este caso de prueba cubre la primera línea del método getCollection y el caso de prueba en realidad intenta ejecutar la segunda línea. ¿Cómo puedo burlarme de la segunda línea? Cualquier sugerencia sería muy útil. Gracias por adelantado.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Puede usar jest.spyOn(object, methodName) para burlarse de Common.connect() y MongoClient.connect() .

P.ej

common.js :

 import { MongoClient } from 'mongodb'; export class Common { constructor() { this._client = null; } static async connect(url) { this._client = await MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true, }); return this._client; } static async getCollection({ url, db_name, collection_name }) { const client = await Common.connect(url); return client.db(db_name).collection(collection_name); } }

common.test.js :

 import { Common } from './common'; import { MongoClient } from 'mongodb'; describe('66848944', () => { afterEach(() => { jest.restoreAllMocks(); }); describe('#getCollection', () => { it('To check if the collection method on the MongoClient instance was invoked', async () => { const client = { db: jest.fn().mockReturnThis(), collection: jest.fn() }; const connectSpy = jest.spyOn(Common, 'connect').mockResolvedValueOnce(client); await Common.getCollection({ url: 'mongodb://localhost:27017', db_name: 'awesome', collection_name: 'products' }); expect(connectSpy).toBeCalledWith('mongodb://localhost:27017'); expect(client.db).toBeCalledWith('awesome'); expect(client.collection).toBeCalledWith('products'); }); }); describe('#connect', () => { it('should connect to mongo db', async () => { const connectSpy = jest.spyOn(MongoClient, 'connect').mockReturnValueOnce({}); const actual = await Common.connect('mongodb://localhost:27017'); expect(actual).toEqual({}); expect(connectSpy).toBeCalledWith('mongodb://localhost:27017', { useNewUrlParser: true, useUnifiedTopology: true, }); }); }); });

resultado de la prueba unitaria:

 PASS examples/66848944/common.test.js 66848944 #getCollection ✓ To check if the collection method on the MongoClient instance was invoked (5 ms) #connect ✓ should connect to mongo db (1 ms) -----------|---------|----------|---------|---------|------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s -----------|---------|----------|---------|---------|------------------- All files | 85.71 | 100 | 66.67 | 85.71 | common.js | 85.71 | 100 | 66.67 | 85.71 | 5 -----------|---------|----------|---------|---------|------------------- Test Suites: 1 passed, 1 total Tests: 2 passed, 2 total Snapshots: 0 total Time: 5.165 s, estimated 6 s
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda