Beim Erstellen von Komponententests sollte sichergestellt werden, dass sie isoliert und nicht von externen Diensten abhängig sind. Dies erreichst du durch Erstellen von Pseudoobjekten, die die Schichten deiner Anwendung abstrahieren. Copilot-Chat kann Ihnen dabei helfen, den Code zu generieren, den Sie zum Erstellen dieser Pseudoobjekte benötigen.
Beispielszenario
Stelle dir eine Website vor, die mit TypeScript erstellt wurde und eine Runnerliste anzeigt. Du hast einen Dienst, der Läufer aus einer Datenbank abruft, und den serverseitigen Code, der diesen Dienst verwendet. Du möchtest den serverseitigen Code testen, aber keinen Aufruf an die Datenbank durchführen. Sie können Copilot-Chat bitten, ein Mockobjekt für den Dienst zu generieren.
// SvelteKit example at +page.server.ts
import service from './service';
export async function load({ params }) {
const runner = await service.getRunner(params.id);
return {
runner
};
}
Beispielaufforderung
In diesem Beispiel wird davon ausgegangen, dass du für deine Tests vitest verwendest, aber mit anderen Testrunnern arbeitest.
/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.
Wenn Sie über einen vorhandenen Test verfügen, den Sie Copilot als Vorlage verwenden möchten, können Sie #file: path/to/test-file.js den Pfad zur Datei angeben und diese Informationen in den Prompt aufnehmen.
Beispielantwort
Hinweis
Die folgende Antwort ist ein Beispiel. Da die Copilot-Chat-Antworten nicht deterministisch sind, erhältst du möglicherweise eine andere Antwort als die hier beschriebene.
Copilot liefert den Plan, den es umsetzen wird, und den Code, der die Mocks enthält.
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 });
});
});