es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo simular una respuesta de base de datos en Jest?

Quería simular la respuesta de la base de datos desde la solicitud de API. Estoy intentando aplicar las Simulaciones Manuales, pero no funciona. Cada vez responde desde la base de datos, no desde las simulaciones. ¿Cómo puedo solucionarlo? Aquí está mi código:

app.test.ts

jest.mock('../services/__mocks__/image');

describe("Debe ser método get", () => {
  it("obtener todas las URL de imágenes", async () => {
    const res = await request(app).get("/api/v1/all");
    expect(res.statusCode).toBe(200);
    // console.log(res.body);
    let images = res.body
    // expect(images.length).toBeGreaterThan(0);
    expect(images.length).toBe(1);
  });
});

services / mocks / image.ts

let images = [
  {
    "_id": "61364c4552781af510baf4bf",
    "title": "9-06_09_2021_11_13_41",
    "imageURL": "upload/9-06_09_2021_11_13_41.jpeg",
    "imageFullURL": "http://localhost:4000/9-06_09_2021_11_13_41.jpeg",
    "createdAt": "2021-09-06T17:13:41.390Z"
  }
];

export const allImages = () => {
  console.log("uso simulado");
  return images;
};

services / image.ts

import Image from "../models/image;;

export const allImages = async () => {
    console.log("uso principal");
    const all = await Image.find();
    return all;
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema donde las burlas manuales no se aplican y la prueba sigue recibiendo respuestas de la base de datos en lugar de las burlas, puede intentar lo siguiente:

    1. Verifique que la ruta del archivo de burla manual sea correcta. Asegúrese de que la ruta del archivo en su llamada jest.mock sea correcta y coincida con la ruta real del archivo de burla.
    2. Verifique que el archivo de servicio real no se esté importando en otro lugar en el código. Si es así, entonces anulará la burla manual.

    Para evitar esto, puede intentar mover la burla manual a un directorio superior, o puede usar jest.doMock para burlar el módulo solo para ese archivo específico. Por ejemplo:

    jest.doMock('../services/image', () => {
      return {
        allImages: () => {
          return [
            {
              "_id": "61364c4552781af510baf4bf",
              "title": "9-06_09_2021_11_13_41",
              "imageURL": "upload/9-06_09_2021_11_13_41.jpeg",
              "imageFullURL": "http://localhost:4000/9-06_09_2021_11_13_41.jpeg",
              "createdAt": "2021-09-06T17:13:41.390Z"
            }
          ]
        }
      }
    });
    
    1. Otra opción es usar una función de fábrica de burla manual. Esto le permitirá restablecer/burlarse de los datos cada vez que se ejecute la prueba. Aquí hay un ejemplo:

    services/mocks/image.ts

    export const createMockImageService = (mockData = []) => {
      return {
        allImages: () => {
          return Promise.resolve(mockData);
        }
      };
    }
    

    En su archivo de prueba, luego puede usar la función de fábrica de burla manual para crear un nuevo servicio de burla con los datos de burla deseados:

    const mockService = createMockImageService([
      {
        "_id": "1",
        "title": "mockImage1",
        "imageURL": "mockImage1.jpg",
        "imageFullURL": "http://localhost:4000/mockImage1.jpg",
        "createdAt": "2021-01-01T00:00:00.000Z"
      },
      {
        "_id": "2",
        "title": "mockImage2",
        "imageURL": "mockImage2.jpg",
        "imageFullURL": "http://localhost:4000/mockImage2.jpg",
        "createdAt": "2021-02-02T00:00:00.000Z"
      }
    ]);
    
    jest.mock('../services/image', () => {
      return mockService;
    });
    
    // realizar pruebas utilizando el servicio de burla
    

    De esta manera, puede cambiar fácilmente los datos de burla para cada caso de prueba sin tener que modificar el archivo de burla real.

Comments are closed.