Skip to main content

Créer des tests de bout en bout pour une page web

Copilot Chat peut aider à générer des tests de bout en bout.

La création de tests de bout en bout pour une page web peut prendre du temps et être complexe, car le code HTML sera généré dynamiquement. Copilot Chat peut vous aider à créer des tests de bout en bout pour une page web en suggérant le code nécessaire pour interagir avec la page web et valider les résultats attendus.

Exemple de scénario

Imaginez une application React qui affiche les détails du produit sur une page web. Vous devez créer des tests de bout en bout pour vous assurer que les détails du produit sont affichés correctement. Vous pouvez demander à Copilot Chat de générer ces tests pour vous.

import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';

const ProductDetails = ({ productId = '1' }) => {
  const [product, setProduct] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    const fetchProduct = async () => {
      try {
        const response = await fetch(`/api/product/${productId}`);
        if (!response.ok) {
          throw new Error('Product not found');
        }
        const data = await response.json();
        setProduct(data);
        setLoading(false);
      } catch (err) {
        setError(err.message);
        setLoading(false);
      }
    };

    fetchProduct();
    return;
  }, [productId]); // Add productId to dependency array

  if (loading) return <div>Loading...</div>;
  if (error) return <div>Error: {error}</div>;

  return (
    <div>
      {product && (
        <div>
          <h2>{product.name}</h2>
          <p>{product.description}</p>
          <p>Price: ${product.price}</p>
        </div>
      )}
    </div>
  );
};

ProductDetails.propTypes = {
  productId: PropTypes.string
};

export default ProductDetails;

Exemples d’invite

Note

Cet exemple utilise Playwright pour les tests de bout en bout, mais vous pouvez utiliser d’autres frameworks comme Selenium ou Cypress.

Using Playwright, generate an e2e test to ensure the product displays correctly.

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 répondra par un test de bout en bout que vous pourrez utiliser pour votre application.

import { test, expect } from '@playwright/test';

test.describe('ProductDetails Component', () => {
  test.beforeEach(async ({ page }) => {
    // Set up API mocking
    await page.route('/api/product/1', async (route) => {
      await route.fulfill({
        status: 200,
        contentType: 'application/json',
        body: JSON.stringify({
          name: 'Test Product',
          description: 'This is a test product',
          price: 99.99
        })
      });
    });

    // Mock error response for product ID 999
    await page.route('/api/product/999', async (route) => {
      await route.fulfill({
        status: 404,
        contentType: 'application/json',
        body: JSON.stringify({ error: 'Product not found' })
      });
    });
  });

  test('displays loading state initially', async ({ page }) => {
    await page.goto('/product/1');
    const loadingElement = page.locator('text=Loading...');
    await expect(loadingElement).toBeVisible();
  });

  test('displays product details correctly', async ({ page }) => {
    await page.goto('/product/1');

    // Wait for loading to disappear
    await expect(page.getByText('Loading...')).toBeHidden();

    // Check all product details
    await expect(page.locator('h2')).toHaveText('Test Product');
    await expect(page.locator('text=This is a test product')).toBeVisible();
    await expect(page.locator('text=Price: $99.99')).toBeVisible();
  });

  test('displays error message when product not found', async ({ page }) => {
    await page.goto('/product/999');

    // Wait for loading to disappear
    await expect(page.getByText('Loading...')).toBeHidden();

    // Check error message
    await expect(page.locator('text=Error: Product not found')).toBeVisible();
  });
});

Pour aller plus loin