При создании модульных тестов важно убедиться, что они изолированы и не зависят от внешних служб. Одним из способов этого является создание макетных объектов, которые абстрагируют слои приложения. Copilot Chat может помочь создать код, который необходимо создать эти макетные объекты.
Пример сценария
Представьте себе веб-сайт, созданный с помощью TypeScript, который отображает список runners. У вас есть служба, которая извлекает runners из базы данных и серверный код, который использует эту службу. Вы хотите протестировать серверный код, но не хотите вызывать базу данных. Вы можете попросить Copilot Chat создать объект макета для службы.
// SvelteKit example at +page.server.ts
import service from './service';
export async function load({ params }) {
const runner = await service.getRunner(params.id);
return {
runner
};
}
Пример запроса
В этом примере предполагается, что вы используете vitest для тестов, но будет работать с другими средствами выполнения тестов.
/tests Create a unit test to ensure the service is called correctly. Mock the service object.
Если у вас есть существующий тест, который вы хотите Copilot использовать в качестве модели, можно использовать #file: path/to/test-file.js
для предоставления пути к файлу и включить эти сведения в запрос.
Пример отклика
Примечание.
Следующий ответ является примером. Ответы являются недетерминированными, поэтому вы можете получить другой ответ, показанный здесь.
Copilot предоставляет план, который он реализует, и текст кода, включающий макеты.
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 });
});
});