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. Chat de Copiloto 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. Tienes 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 Chat de Copiloto genere un objeto ficticio para el servicio.
// 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 para las pruebas, pero funcionará con otros ejecutores de pruebas.
/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.
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
Nota:
La respuesta siguiente es un ejemplo. Las respuestas de Chat de Copiloto 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.
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 });
});
});