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.
/tests Create a unit test to ensure the service is called correctly. Mock the service object.
// SvelteKit example at +page.server.ts
import service from './service';
export async function load({ params }) {
const runner = await service.getRunner(params.id);
return {
runner
};
}
/tests Create a unit test to ensure the service is called correctly. Mock the service object.
/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 });
});
});