web-dev-qa-db-fra.com

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

Quelle est la différence conceptuelle entre spécifications de fonctionnalité et spécifications de demande de Rspec?

À partir des documents de spécification des fonctionnalités:

Les spécifications de fonctionnalité sont des tests de haut niveau destinés à exercer des tranches de fonctionnalité 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 la demande:

Les spécifications de demande fournissent une enveloppe mince autour des tests d'intégration de Rails et sont conçues pour conduire le comportement à travers la pile 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 demandes sur plusieurs contrôleurs
  • spécifier plusieurs demandes sur plusieurs sessions

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

111
harm

La différence conceptuelle est que vous testez généralement une user story et que toutes les interactions doivent être pilotées via l'interface utilisateur. C'est là qu'intervient Capybara. Une spécification de demande teste toujours le comportement de votre application et n'a pas l'attente de lisibilité qu'aurait un test d'acceptation. Ainsi, la fonctionnalité est là pour la syntaxe améliorée pour les tests d'acceptation.

Les différences techniques incluent l'enveloppement des spécifications de la demande Rails tests d'intégration, contrairement aux spécifications des fonctionnalités. Cela signifie qu'avec les spécifications de la demande, vous pouvez utiliser les méthodes get, post, put, delete et assert contre la réponse. Avec les spécifications des fonctionnalités vous devez conduire toutes les interactions via le navigateur et utiliser des méthodes telles que visiter et affirmer sur la page.

Je recommanderais de lire le feature_spec.feature dans le code source rspec-Rails sur github. J'espère que ça aide.

144
Richard Jordan