【发布时间】:2018-06-12 08:08:35
【问题描述】:
恐怕有人结束了我的问题,但我找不到令人满意的问题(可能是因为我在 Angular 2+ 世界中非常有限,而且我理解错了)。
据我所知,在完成了一些 Hello World 并且观看了一些 YouTube 演示之后:
ng 测试:
- 您使用 Jasmine 语言编写测试
- 您使用 Karma 提供的许多浏览器测试您的测试
- 您执行单元测试或集成测试
- 所有
xxx.compnent.spec.ts运行,最终在浏览器中显示类似于JUnit的报告
ng e2e:
- 您使用 Jasmine 语言编写测试
- 您使用 Karma 提供的许多浏览器测试您的测试
-
您在编写测试时考虑到嵌套用户事件
eg. page.navigateTo(); page.getParagraphText() .then(msg => expect(msg).toEqual('Welcome to app!!')) .then(msg => expect(msg).toEqual('xxx')) .then(done, done.fail); 您主要在将应用程序部署到一种预生产环境后使用量角器执行端到端测试
- 触发e2e文件夹下的测试,并在命令行控制台打印结果
从理论上讲,第二个特定于端到端,其重点是模拟最终用户完成的整个流程。
希望,直到这里是正确的,我想知道幕后发生了什么真正让他们与众不同。我不想比较哪个更好,但我肯定以某种方式遗漏了一些要点,因为我使用最终用户完成的完全相同的想法创建了几个测试,并且我通过 ng test 触发了它。
例如:
...
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");
});
...
我记得我读过类似“量角器在测试执行期间提供等待/睡眠行为”之类的内容,但是当我看到没有量角器完成的测试也能够模拟最终用户时,我看不到这个聚合值在哪里。只要您编写测试代码以执行最终用户完成的完全相同的流程,它将与 Angular Cli 创建的 e2e 文件夹下的相同 e2e 测试建议。
如果我的研究促使我正确理解上面发布的内容,唯一真正的区别是我作为开发人员组织测试的方式。幕后并没有真正不同。
再次,我希望将此视为出于教学目的的澄清问题:这里根本没有比较框架的意图。
【问题讨论】:
-
我相信您总结得非常详细,但不清楚您是如何得出这样的结论的,如 幕后并没有发生什么真正不同的事情。后者是不涉及 TestBed 的黑盒测试,几乎在生产环境中执行。前者则相反。它们是服务于不同目的的不同事物。如果您对单元测试、集成测试和 e2e 测试之间的区别感到困惑,那么有很多关于该主题的已回答问题。
-
我完全同意 estus 的评论。我添加了一个答案,以提供一些可以帮助您理解整个事情的元素。
标签: angular jasmine protractor angular-cli karma-jasmine