# Criação de objetos fictícios para abstrair camadas

O Bate-papo do Copilot pode ajudar na criação de objetos fictícios que você pode usar para testes de unidade.

Ao criar testes de unidade, é importante garantir que eles estejam isolados e não dependam dos serviços externos. Uma maneira de fazer isso é criar objetos fictícios que abstraem camadas do seu aplicativo. O Bate-papo do Copilot pode ajudar você a gerar o código necessário para criar esses objetos fictícios.

## Cenário de exemplo

Imagine um site criado com TypeScript que exibe uma lista de corredores. Você tem um serviço que busca os executores de um banco de dados e o código do lado do servidor que usa esse serviço. Você quer testar o código do lado do servidor, mas não quer fazer uma chamada para o banco de dados. Você pode solicitar que o Bate-papo do Copilot gere um objeto fictício para o serviço.

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

## Solicitação de exemplo

Este exemplo pressupõe que você esteja usando [vitest](https://vitest.dev/) para seus testes, mas funciona com outros executores de teste.

```copilot copy prompt ref=mock-service
/tests Create a unit test to ensure the service is called correctly. Mock the service object.
```

Se você tem um teste existente que deseja que o Copilot use como modelo, poderá usar o `#file: path/to/test-file.js` para fornecer o caminho para o arquivo e incluir essas informações no prompt.

## Exemplo de resposta

> \[!NOTE] A resposta a seguir é um exemplo. Respostas do Bate-papo do Copilot são não determinísticas, portanto, você pode obter uma resposta diferente da mostrada aqui.

O Copilot fornece o plano que implementará e o texto do código que inclui as simulações.

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

## Leitura adicional

* [Engenharia de prompts para o GitHub Copilot Chat](/pt/copilot/using-github-copilot/prompt-engineering-for-github-copilot)
* [Práticas recomendadas para usar GitHub Copilot](/pt/copilot/using-github-copilot/best-practices-for-using-github-copilot)