J'ai peur que quelqu'un ferme ma question mais je n'ai pas trouvé de question satisfaisante (peut-être parce que je suis très limité dans le monde Angular 2+ et j'ai compris quelque chose de mal)).
Pour autant que je puisse comprendre après quelques Hello World et quelques démos YouTube regardées:
test ng:
xxx.compnent.spec.ts
exécuter et un rapport final similaire à JUnit est affiché dans le navigateurng e2e:
vous écrivez vos tests en tenant compte de l'imbrication de l'événement utilisateur
eg. page.navigateTo();
page.getParagraphText()
.then(msg => expect(msg).toEqual('Welcome to app!!'))
.then(msg => expect(msg).toEqual('xxx'))
.then(done, done.fail);
vous exécutez le test de bout en bout en utilisant le rapporteur principalement après avoir déployé l'application une sorte d'environnement de pré-production
En théorie, le second est spécifique de bout en bout où l'accent est mis sur la simulation d'un flux complet effectué par un utilisateur final.
J'espère que jusqu'à ce que ce soit correct, je me demande ce qui se passe derrière la scène qui les rend vraiment différents. Je ne veux pas comparer ce qui est mieux, mais je manque certainement un point parce que j'ai créé quelques tests en utilisant exactement la même idée faite par l'utilisateur final et je l'ai déclenchée par ng test.
Par exemple:
...
it('should display the modal when `create Paste` is clicked', () => {
let createPasteButton = fixture.debugElement.query(By.css("button"));
//create a spy on the createPaste method
spyOn(component,"createPaste").and.callThrough();
//triggerEventHandler simulates a click event on the button object
createPasteButton.triggerEventHandler('click',null);
//spy checks whether the method was called
expect(component.createPaste).toHaveBeenCalled();
fixture.detectChanges();
expect(component.showModal).toBeTruthy("showModal should now be true");
expect(element.innerHTML).toContain("source-modal");
});
...
Je me suis souvenu avoir lu quelque chose comme "le rapporteur offre un comportement d'attente/de sommeil pendant l'exécution des tests" mais je ne peux pas voir où cette valeur agrégée lorsque je vois les tests effectués sans rapporteur a pu simuler un utilisateur final également. Tant que vous codez vos tests pour faire exactement le même flux que celui fait par un utilisateur final, ce sera le même test e2e proposé dans le dossier e2e créé par Angular Cli.
Si mon étude m'a conduit à comprendre correctement comme indiqué ci-dessus, la seule vraie différence est la façon dont moi, en tant que développeur, organise mes tests. Il n'y a rien de vraiment différent derrière la scène.
Encore une fois, j'apprécierais que cela clarifie la question à des fins didactiques: il n'est nullement question de comparer les cadres ici.
Vous êtes sur la bonne voie pour tout comprendre.
Vous utilisez le framework jasmine pour écrire vos tests et les définir comme des suites et attendre des résultats que vous pouvez tester, mais l'essentiel est que vous utilisez en fait le lanceur de karma pour exécuter des tests directement sur le navigateur. Ceci est normalement configuré dans l'application angular.
Cela signifie qu'un seul serveur exécute les tests et c'est tout. Vous testez avec vos propres valeurs et vérifiez que vos composants fonctionnent correctement.
Le but est de vérifier pour des composants uniques (test unitaire) ou plusieurs modules/composants (tests d'intégration) qu'une seule fonction/petit workflow fonctionne correctement comme prévu sans effets secondaires.
Protractor est un cadre de test de bout en bout pour les applications Angular et AngularJS. Protractor exécute des tests sur votre application exécutée dans un navigateur réel, interagissant avec elle comme le ferait un utilisateur.
Ici, les tests que vous avez écrits agiront en tant qu'utilisateur. Cela signifie que votre application s'exécute dans votre navigateur et qu'un autre programme exécutera les tests par rapport à votre application, simulant une interaction utilisateur.
Ceci est très important, car cela signifie deux choses:
L'objectif du rapporteur est de valider un workflow opérationnel complet dans votre application. Par exemple, j'écrirai mon test unitaire pour mon composant de connexion, j'écrirai un test unitaire pour mon service de connexion, j'écrirai un test d'intégration pour l'ensemble de mon module et quel que soit le comportement à tester qui dépend de plusieurs composants/services. Une fois cela fait, j'écrirai plus tard un test de bout en bout complet qui validera tout mon processus d'authentification dans mon application.
Gardez à l'esprit qu'il y a un ratio qui est important dans les tests qui est très logique:
Pourquoi donc ? Parce que si vous avez testé correctement un grand nombre de vos composants, vous n'aurez pas besoin de le tester à nouveau dans vos tests de bout en bout.
Conclusion:
N.B.: Soyez également conscient de ces points:
J'espère que cela t'aides.