Skip to main content

Criar objetos fictícios para abstrair camadas

O Copilot Chat 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 Copilot Chat 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 executores. 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 Copilot Chat gere um objeto fictício para o serviço.

// 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 para seus testes, mas funciona com outros executores de teste.

/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 Copilot Chat 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.

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