JavaScript 单元测试或端到端测试
JavaScript Unit Test or End to End Test
目前,我尝试与我的开发团队成员一起为我们的 javascript 解决方案开发一些模块化系统。因为我们能够重新开始,所以这次我们想做对 - 通过测试!
我们为我们的单元测试找到了 Jasmine 和 Karma,为我们的端到端测试找到了 Selenium/Nightwatch。
当我为那些从未接触过任何 DOM 到 jQuery 的系统组件编写单元测试时,我很高兴。但是有一天我遇到了一些操纵 DOM 的组件。到目前为止,一切都很好。感谢 Jasmine-jQuery,我也设法测试了它们。直到此时我确信仍然在单元测试的范围内。
虽然昨天,我坐在一个组件前面,只要用户要向下滚动网页,它就会使导航栏粘住(或固定)。
我想再次使用 Jasmine-jQuery 测试此功能。我所做的是 - 我嘲笑用户使用“window.scrollTo(0, 2000)”滚动,然后检查这些导航栏的属性是否已更改。
问题:
我的团队负责人让我暂停,因为我已经跨入域进行端到端测试,因为我需要模拟浏览器功能。
我的问题:真的是这样吗?在我看来,端到端测试应该在生产环境中测试系统(比如我们的系统)的多个功能的编排。因此,用户故事将是我将使用端到端测试进行测试的层。检查用户必须去登录和撰写文章(例如)的路径是否按预期方式工作。
但是检查 javascript 组件是否会在某些事件(如滚动事件)发生后成功 add/remove 属性到 DOM - 仍然应该是一个单元测试。
我是一名学徒开发人员 - 我尊重我的团队负责人的经验 - 但我仍然想完全确保事情会以正确的方式完成。
所以我问你是否可以告诉我在编写 JavaScript 和操作 DOM 时单元测试何时结束以及端到端测试何时开始。
一些队友向我解释说,如果您检查故障对用户体验的影响有多严重,这可能是一种了解它是否是端到端测试特定功能的好方法。但前提是您真的在单元测试和 E2E 之间挣扎。那么你应该问问自己 "Would a fail result in a really bad user experience or will only some error be thrown in the console and a little picture wouldn't be loaded properly".
查看这篇文章 http://www.itaware.eu/2012/10/19/angularjs-unit-tests-and-end-to-end-tests/。它专门处理 Angular 但澄清了两者之间的区别。您的团队负责人绝对是正确的,这不是您操纵 DOM 使其成为 E2E 类型测试的事实,而是您模拟用户界面的事实。
在这里你可以找到关于测试之间差异的非常好的解释:What's the difference between unit, functional, acceptance, and integration tests?。
我认为带有 WebDriver 的 Selenium 是测试 E2E 的最佳解决方案。如果您使用 AngularJS,一个很好的解决方案是使用 Protractor (https://angular.github.io/protractor/#/)。
希望对您有所帮助
目前,我尝试与我的开发团队成员一起为我们的 javascript 解决方案开发一些模块化系统。因为我们能够重新开始,所以这次我们想做对 - 通过测试!
我们为我们的单元测试找到了 Jasmine 和 Karma,为我们的端到端测试找到了 Selenium/Nightwatch。
当我为那些从未接触过任何 DOM 到 jQuery 的系统组件编写单元测试时,我很高兴。但是有一天我遇到了一些操纵 DOM 的组件。到目前为止,一切都很好。感谢 Jasmine-jQuery,我也设法测试了它们。直到此时我确信仍然在单元测试的范围内。
虽然昨天,我坐在一个组件前面,只要用户要向下滚动网页,它就会使导航栏粘住(或固定)。
我想再次使用 Jasmine-jQuery 测试此功能。我所做的是 - 我嘲笑用户使用“window.scrollTo(0, 2000)”滚动,然后检查这些导航栏的属性是否已更改。
问题:
我的团队负责人让我暂停,因为我已经跨入域进行端到端测试,因为我需要模拟浏览器功能。
我的问题:真的是这样吗?在我看来,端到端测试应该在生产环境中测试系统(比如我们的系统)的多个功能的编排。因此,用户故事将是我将使用端到端测试进行测试的层。检查用户必须去登录和撰写文章(例如)的路径是否按预期方式工作。 但是检查 javascript 组件是否会在某些事件(如滚动事件)发生后成功 add/remove 属性到 DOM - 仍然应该是一个单元测试。
我是一名学徒开发人员 - 我尊重我的团队负责人的经验 - 但我仍然想完全确保事情会以正确的方式完成。
所以我问你是否可以告诉我在编写 JavaScript 和操作 DOM 时单元测试何时结束以及端到端测试何时开始。
一些队友向我解释说,如果您检查故障对用户体验的影响有多严重,这可能是一种了解它是否是端到端测试特定功能的好方法。但前提是您真的在单元测试和 E2E 之间挣扎。那么你应该问问自己 "Would a fail result in a really bad user experience or will only some error be thrown in the console and a little picture wouldn't be loaded properly".
查看这篇文章 http://www.itaware.eu/2012/10/19/angularjs-unit-tests-and-end-to-end-tests/。它专门处理 Angular 但澄清了两者之间的区别。您的团队负责人绝对是正确的,这不是您操纵 DOM 使其成为 E2E 类型测试的事实,而是您模拟用户界面的事实。
在这里你可以找到关于测试之间差异的非常好的解释:What's the difference between unit, functional, acceptance, and integration tests?。 我认为带有 WebDriver 的 Selenium 是测试 E2E 的最佳解决方案。如果您使用 AngularJS,一个很好的解决方案是使用 Protractor (https://angular.github.io/protractor/#/)。
希望对您有所帮助