RSpec: Quelle est la différence entre une caractéristique et une spécification de demande?

Quelle est la différence conceptuelle entre les spécifications de caractéristiques de Rspec et les spécifications de demande ?

À partir des caractéristiques techniques:

Les spécifications de fonctionnalités sont des tests de haut niveau destinés à exercer des fonctionnalités via une application. Ils doivent piloter l’application uniquement via son interface externe, généralement des pages Web.

Et pour les spécifications de demande:

Les spécifications de requête fournissent une enveloppe mince autour des tests d’intégration de Rails et sont conçues pour générer un comportement à travers la stack complète, y compris le routage (fourni par Rails) et sans stubbing (à vous de choisir). Avec les spécifications de la demande, vous pouvez:

  • spécifier une seule demande
  • spécifier plusieurs requêtes sur plusieurs contrôleurs
  • spécifier plusieurs requêtes sur plusieurs sessions

Je sais que les spécifications des fonctionnalités utilisent Capybara et que les spécifications des requêtes ne le font pas. Mais cela ne mérite guère de concepts différents.

La différence conceptuelle réside dans le fait que vous testez généralement une user story et que toute interaction doit être pilotée via l’interface utilisateur. C’est là qu’intervient Capybara. Une spécification de demande teste toujours le comportement de votre application et n’attend pas la lisibilité d’un test d’acceptation. La fonctionnalité est donc améliorée pour la syntaxe améliorée des tests d’acceptation.

Les différences techniques incluent les spécifications de requête qui intègrent les tests d’intégration Rails, contrairement aux spécifications de fonctionnalités. Cela signifie qu’avec les spécifications de requête, vous pouvez utiliser des méthodes pour obtenir, publier, mettre, supprimer et affirmer une réponse. Avec les spécifications de fonctionnalités, vous devez piloter toutes les interactions via le navigateur et utiliser des méthodes telles que la visite et l’affirmation sur la page.

Je vous recommande de lire feature_spec.feature dans le code source de rspec-rails sur github. J’espère que ça aide.