# Creación de objetos ficticios para abstraer capas

Copilot Chat 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.
Copilot Chat 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. Tiene 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 Copilot Chat genere un objeto ficticio para el servicio.

```typescript id=mock-service
// 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](https://vitest.dev/) para las pruebas, pero funcionará con otros ejecutores de pruebas.

```copilot copy prompt ref=mock-service
/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

> \[!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 simulacros.

```typescript
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

* [Ingeniería de mensajes para GitHub Copilot Chat](/es/enterprise-cloud@latest/copilot/concepts/prompting/prompt-engineering)
* [Procedimientos recomendados para usar GitHub Copilot](/es/enterprise-cloud@latest/copilot/get-started/best-practices)