Skip to main content

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

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. Bate-papo do Copilot pode ajudá-lo 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 Bate-papo do Copilot a geração de 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
  };
}

Prompt de exemplo

Este exemplo pressupõe que você esteja usando vitest para seus testes, mas funciona com outros executores de teste.

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

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

Resposta de exemplo

Observação

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.

Copilot fornece o plano que ele implementará e o texto de 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