Skip to main content

Créer des objets fictifs dans des couches abstraites

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 fantaisie.

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 fantaisie 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

Note

La réponse suivante est un exemple. Copilot Chat Les réponses ne sont pas déterministes, il est donc possible que vous obteniez une réponse différente de celle présenté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