> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tests et refactoring

export const PromptBlock = ({children, type, agent, intent, playbookId}) => {
  var utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=prompt-block';
  var tag = 'docs-use-case-gallery';
  var agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  var label = type === 'schedule' ? 'Schedule in Devin' : type === 'playbook' ? 'Create Playbook' : type === 'knowledge' ? 'Add to Knowledge' : agent === 'advanced' ? 'Try in Devin' : agent === 'dana' ? 'Try in Dana' : agent === 'ada' ? 'Try in Ask Devin' : 'Try in Devin';
  var buildUrl = function (text) {
    var encoded = encodeURIComponent(text);
    if (type === 'schedule') return 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + '&prompt=' + encoded;
    if (type === 'playbook') return 'https://app.devin.ai/settings/playbooks/create?' + utm + '&body=' + encoded;
    if (type === 'knowledge') return 'https://app.devin.ai/knowledge?' + utm + '&body=' + encoded;
    if (agent === 'ada') return 'https://app.devin.ai/search?' + utm + '&noSubmit=true&prompt=' + encoded;
    return 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encoded;
  };
  const ref = React.useRef(null);
  const [href, setHref] = React.useState('#');
  React.useEffect(() => {
    if (!ref.current) return;
    var codeEl = ref.current.querySelector('pre code');
    if (codeEl) {
      var text = codeEl.textContent.trim();
      if (text) setHref(buildUrl(text));
    }
    var header = ref.current.querySelector('[data-component-part="code-block-header"]');
    if (header && !header.querySelector('.prompt-block-devin-link')) {
      var link = document.createElement('a');
      link.href = href;
      link.target = '_blank';
      link.rel = 'noopener noreferrer';
      link.className = 'prompt-block-devin-link';
      link.style.cssText = 'display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:#fff;font-size:11px;font-weight:500;padding:4px 10px;border-radius:6px;white-space:nowrap;background:#317CFF;transition:background 0.2s;margin-left:8px;';
      link.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg> ' + label;
      link.onmouseenter = function () {
        link.style.background = '#2968D9';
      };
      link.onmouseleave = function () {
        link.style.background = '#317CFF';
      };
      header.appendChild(link);
    }
    var existingLink = ref.current.querySelector('.prompt-block-devin-link');
    if (existingLink && href !== '#') existingLink.href = href;
  });
  return <div className="prompt-block" ref={ref}>{children}</div>;
};

<div id="overview">
  ## Vue d’ensemble
</div>

Devin peut analyser des bases de code existantes, identifier les axes d’amélioration ou exécuter les tâches de refactorisation que vous lui confiez, tout en préservant la fonctionnalité.

<div id="common-use-cases">
  ## Cas d’utilisation courants
</div>

1. Rédaction et extension de la couverture de test
2. Refactorisation et optimisation du code
3. Développement et modification de points de terminaison d’API
4. Améliorations des performances
5. Revue de code et assurance qualité
6. Flux de tests automatisés via la [Référence de l’API](/fr/api-reference/overview)

<div id="example-prompts">
  ## Exemples de prompts
</div>

<AccordionGroup>
  <Accordion title="Écrire un test unitaire" icon="magnifying-glass">
    <PromptBlock>
      ```txt Write unit test theme={null}
      Peux-tu configurer https://github.com/markedjs/marked, utiliser l'outil en ligne de commande avec l'option --output/-o, puis ajouter un test unitaire pour vérifier l'option --output ?
      Il devrait déjà y avoir des tests similaires dans bin.test.js que tu peux compléter.
      ```
    </PromptBlock>
  </Accordion>

  <Accordion title="Refactorisation d'endpoint" icon="gear-code">
    <PromptBlock>
      ```txt Endpoint refactor theme={null}
      Actuellement, lorsque les utilisateurs envoient une requête POST à <endpoint>, nous <describe endpoint behavior>. Il serait préférable de scinder cet endpoint en 2 endpoints distincts parce que <explain reasoning>.
      <Describe what the first endpoint should do>.
      <Describe what the second endpoint should do>.
      Teste en faisant ceci : <explain how Devin can test each endpoint to verify it's on the right track>.
      ```
    </PromptBlock>
  </Accordion>

  <Accordion title="Refactorisation générale" icon="code">
    <PromptBlock>
      ```txt General refactor theme={null}
      Dans le serveur Slack, refactorise AppRegistry dans son propre fichier.
      ```
    </PromptBlock>
  </Accordion>
</AccordionGroup>

<div id="example-sessions">
  ## Exemples de sessions
</div>

<div id="code-coverage-tutorial">
  ### Tutoriel sur la couverture de code
</div>

Découvrez comment améliorer de manière systématique la couverture de tests grâce à notre tutoriel détaillé :

* Rédiger des tests unitaires complets
* Identifier les lacunes de couverture
* Mettre en œuvre les cas de test manquants

[Voir le tutoriel sur la couverture de code](/fr/use-cases/tutorials/code-coverage)

<div id="connect4-code-refactor">
  ### Refactorisation du code de Connect4
</div>

Une session de refactorisation complète présentant :

* Amélioration de la structure du code
* Séparation en composants
* Optimisation des performances
* Amélioration de la couverture de test

**Voir la session :**
[https://app.devin.ai/sessions/8965de5e3ae0436985bf3dd2e1a5b4af](https://app.devin.ai/sessions/8965de5e3ae0436985bf3dd2e1a5b4af)
