Skip to main content

Creación de objetos ficticios para abstraer capas

Chat de Copiloto puede ayudar a crear objetos ficticios que puede usar para 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. Chat de Copiloto puede ayudarle a generar el código que necesita para crear estos objetos ficticios.

Escenario de ejemplo

Imagina un sitio web creado con TypeScript que muestra una lista de corredores. 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. Puede pedir que Chat de Copiloto 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
  };
}

Mensaje de ejemplo

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

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

Si ya tiene una prueba existente que desea usar Copilot como modelo, puede usar #file: path/to/test-file.js para indicar la ruta del archivo, e incluir esta información en el prompt.

Respuesta de ejemplo

Nota:

La respuesta siguiente es un ejemplo. Las respuestas de Chat de Copiloto 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 simulacros.

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 });
  });
});

Lectura adicional