J'ai peur que quelqu'un ait fermé ma question mais je n'ai pas trouvé de question satisfaisante (peut-être parce que je suis très limité dans le monde d'Angular 2+ et que j'ai mal compris quelque chose).
D'après ce que j'ai pu comprendre après quelques Hello World réalisés et quelques démos YouTube regardées :
ng test :
- vous écrivez votre test en utilisant le langage Jasmine
- vous testez votre test avec de nombreux navigateurs disponibles en utilisant Karma
- vous exécutez des tests unitaires ou intégrés
- tous
xxx.compnent.spec.ts
et un rapport final similaire à celui de JUnit est affiché dans le navigateur.
ng e2e :
-
vous écrivez votre test en utilisant le langage Jasmine
-
vous testez votre test avec de nombreux navigateurs disponibles en utilisant Karma
-
vous écrivez vos tests en tenant compte de l'imbrication des événements 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 un test de bout en bout à l'aide de Protractor principalement après avoir déployé l'application, une sorte d'environnement de pré-production.
-
les tests sous le dossier e2e sont déclenchés et le résultat est imprimé dans la console de ligne de commande.
Théoriquement, la seconde est spécifique à l'approche de bout en bout, où l'objectif est de simuler un flux complet effectué par un utilisateur final.
J'espère que ce n'est pas le cas, mais je me demande ce qui se passe derrière la scène et qui les rend vraiment différents. Je ne veux pas comparer ce qui est le mieux, mais il est certain que j'ai raté quelque chose, car j'ai créé quelques tests en utilisant exactement la même idée que celle de l'utilisateur final et je l'ai déclenchée par le test ng.
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 souviens avoir lu quelque chose comme "protractor offre un comportement d'attente/de sommeil pendant l'exécution des tests" mais je ne vois pas où est la valeur de cet agrégat quand je vois les tests effectués sans que protractor soit capable de simuler un utilisateur final également. Tant que vous codez vos tests pour faire exactement le même flux fait par un utilisateur final, ce sera le même test e2e proposé sous le dossier e2e créé par Angular Cli.
Si mon étude m'a amené à comprendre correctement ce qui est écrit ci-dessus, alors la seule différence réelle est la façon dont moi, en tant que développeur, j'organise mes tests. Il n'y a rien de vraiment différent qui se passe derrière la scène.
Encore une fois, j'apprécierais de voir cette question comme une question de clarification à des fins didactiques : il n'y a aucune intention de comparer les cadres ici.
3 votes
Je crois que vous l'avez bien résumé et je ne vois pas comment vous en êtes arrivé à une conclusion comme celle-ci. Il n'y a rien de vraiment différent qui se passe derrière la scène . Ces derniers sont des tests boîte noire qui n'impliquent pas TestBed et sont effectués dans un environnement proche de la production. Les premiers sont l'inverse. Ce sont des choses différentes qui servent des objectifs différents. Si vous ne comprenez pas bien la différence entre les tests unitaires, d'intégration et e2e, vous trouverez de nombreuses réponses à vos questions sur ce sujet.
0 votes
Je suis tout à fait d'accord avec le commentaire d'Estus. J'ai ajouté une réponse pour fournir quelques éléments qui pourraient vous aider à comprendre l'ensemble.