Skip to main content

Création d'objets fictifs pour abstraire les couches

Copilot Chat peut aider à créer des objets fictifs que vous pouvez utiliser pour les tests unitaires.

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 });
  });
});

Pour aller plus loin