{"meta":{"title":"Создание макетных объектов для абстрактных слоев","intro":"Копилот Чат может помочь в создании макетных объектов, которые можно использовать для модульных тестов.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ru/copilot","title":"GitHub Copilot"},{"href":"/ru/copilot/tutorials","title":"Учебники"},{"href":"/ru/copilot/tutorials/copilot-chat-cookbook","title":"Кулинарная книга чата GitHub Copilot"},{"href":"/ru/copilot/tutorials/copilot-chat-cookbook/testing-code","title":"Тестирование кода"},{"href":"/ru/copilot/tutorials/copilot-chat-cookbook/testing-code/create-mock-objects","title":"Создание макетных объектов"}],"documentType":"article"},"body":"# Создание макетных объектов для абстрактных слоев\n\nКопилот Чат может помочь в создании макетных объектов, которые можно использовать для модульных тестов.\n\nПри создании модульных тестов важно убедиться, что они изолированы и не зависят от внешних служб. Одним из способов этого является создание макетных объектов, которые абстрагируют слои приложения. Копилот Чат может помочь создать код, который необходимо создать эти макетные объекты.\n\n## Пример сценария\n\nПредставьте себе веб-сайт, созданный с помощью TypeScript, который отображает список runners. У вас есть служба, которая извлекает runners из базы данных и серверный код, который использует эту службу. Вы хотите протестировать серверный код, но не хотите вызывать базу данных. Вы можете попросить Копилот Чат создать объект макета для службы.\n\n```typescript id=mock-service\n// SvelteKit example at +page.server.ts\nimport service from './service';\n\nexport async function load({ params }) {\n  const runner = await service.getRunner(params.id);\n\n  return {\n    runner\n  };\n}\n```\n\n## Пример запроса\n\nВ этом примере предполагается, что вы используете [vitest](https://vitest.dev/) для тестов, но будет работать с другими средствами выполнения тестов.\n\n```copilot copy prompt ref=mock-service\n/tests Create a unit test to ensure the service is called correctly. Mock the service object.\n```\n\nЕсли у вас есть существующий тест, который вы хотите Copilot использовать в качестве модели, можно использовать `#file: path/to/test-file.js` для предоставления пути к файлу и включить эти сведения в запрос.\n\n## Пример отклика\n\n> \\[!NOTE] Следующий ответ является примером. Ответы Копилот Чат являются недетерминированными, поэтому вы можете получить другой ответ, показанный здесь.\n\nCopilot предоставляет план, который он реализует, и текст кода, включающий макеты.\n\n```typescript\nimport { describe, it, expect, vi, beforeEach } from 'vitest';\nimport { load } from './+page.server.ts';\n\n// Mock the entire service module\nvi.mock('./service', () => ({\n  default: {\n    getRunner: vi.fn()\n  }\n}));\n\n// Import the mocked service\nimport service from './service';\n\ndescribe('load function', () => {\n  const mockRunner = {\n    id: '123',\n    name: 'Test Runner',\n    status: 'active'\n  };\n\n  beforeEach(() => {\n    // Reset mock before each test\n    vi.resetAllMocks();\n\n    // Setup default mock implementation\n    (service.getRunner as any).mockResolvedValue(mockRunner);\n  });\n\n  it('should fetch runner with correct id', async () => {\n    const params = { id: '123' };\n    const result = await load({ params });\n\n    expect(service.getRunner).toHaveBeenCalledWith('123');\n    expect(service.getRunner).toHaveBeenCalledTimes(1);\n    expect(result).toEqual({ runner: mockRunner });\n  });\n});\n```\n\n## Дополнительные материалы\n\n* [Инженерия подсказок для GitHub Copilot Chat](/ru/copilot/using-github-copilot/prompt-engineering-for-github-copilot)\n* [Лучшие практики использования GitHub Copilot](/ru/copilot/using-github-copilot/best-practices-for-using-github-copilot)"}