Skip to main content

Creación de objetos ficticios para abstraer capas

Copilot Chat puede ayudar con la creación de objetos ficticios que puedes usar para las pruebas unitarias.

Al crear pruebas unitarias, es importante garantizar su aislamiento y que no dependan de servicios externos. Una manera de lograrlo es crear objetos ficticios que abstraigan capas de la aplicación. El Copilot Chat puede ayudarte a generar el código que necesitas para crear estos objetos ficticios.

Escenario de ejemplo

Imagina un sitio web creado con TypeScript que muestra una lista de ejecutores. Tienes un servicio que recupera los ejecutores de una base de datos y el código del lado servidor que usa este servicio. Quieres probar el código del lado servidor, pero no quieres realizar una llamada a la base de datos. Puedes pedir al Copilot Chat que genere un objeto ficticio para el servicio.

// SvelteKit example at +page.server.ts
import service from './service';

export async function load({ params }) {
  const runner = await service.getRunner(params.id);

  return {
    runner
  };
}

Ejemplos de indicaciones

En este ejemplo se supone que usas vitest para las pruebas, pero funcionará con otros ejecutores de pruebas.

/tests Create a unit test to ensure the service is called correctly. Mock the service object.

Si tienes una prueba existente que quieres que Copilot use como modelo, puedes utilizar #file: path/to/test-file.js para proporcionar la ruta de acceso al archivo e incluir esta información en la indicación.

Respuesta de ejemplo

Note

La respuesta siguiente es un ejemplo. Las respuestas de Copilot Chat no son deterministas, por lo que puedes obtener una respuesta diferente a la aquí mostrada.

Copilot proporciona el plan que implementará y el texto del código que incluye los elementos ficticios.

import { describe, it, expect, vi, beforeEach } from 'vitest';
import { load } from './+page.server.ts';

// Mock the entire service module
vi.mock('./service', () => ({
  default: {
    getRunner: vi.fn()
  }
}));

// Import the mocked service
import service from './service';

describe('load function', () => {
  const mockRunner = {
    id: '123',
    name: 'Test Runner',
    status: 'active'
  };

  beforeEach(() => {
    // Reset mock before each test
    vi.resetAllMocks();

    // Setup default mock implementation
    (service.getRunner as any).mockResolvedValue(mockRunner);
  });

  it('should fetch runner with correct id', async () => {
    const params = { id: '123' };
    const result = await load({ params });

    expect(service.getRunner).toHaveBeenCalledWith('123');
    expect(service.getRunner).toHaveBeenCalledTimes(1);
    expect(result).toEqual({ runner: mockRunner });
  });
});

Información adicional