Lors de la crĂ©ation de tests unitaires, il est important de sâassurer quâils sont isolĂ©s et non en fonction des services externes. Pour ce faire, vous pouvez crĂ©er des objets fictifs qui abstraitnt des couches de votre application. Copilot Chat peut vous aider Ă gĂ©nĂ©rer le code dont vous avez besoin pour crĂ©er ces objets fictifs.
Exemple de scénario
Imaginez un site web créé avec TypeScript qui affiche une liste dâexĂ©cuteurs. Vous disposez dâun service qui extrait les exĂ©cuteurs dâune base de donnĂ©es et du code cĂŽtĂ© serveur qui utilise ce service. Vous voulez tester le code cĂŽtĂ© serveur, mais vous ne voulez pas faire d'appel Ă la base de donnĂ©es. Vous pouvez demander Ă Copilot Chat de gĂ©nĂ©rer un objet fictif pour le 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
};
}
Exemples dâinvite
This example assumes you are using vitest for your tests, but will work with other test runners.
/tests Create a unit test to ensure the service is called correctly. Mock the service object.
Si vous disposez d'un test existant que vous souhaitez Copilot utiliser comme modĂšle, vous pouvez utiliser #file: path/to/test-file.js
pour fournir le chemin d'accĂšs au fichier et inclure cette information dans l'invite.
Exemple de réponse
Remarque
La réponse suivante est un exemple. Les réponses Copilot Chat ne sont pas déterministes, vous pouvez donc obtenir une réponse différente de celle affichée ici.
Copilot fournit le plan qu'il va mettre en Ćuvre et le texte du code qui inclut les mocks.
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 });
});
});