Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 2端测试是否足够?_Javascript_Angularjs_Unit Testing_Testing_Tdd - Fatal编程技术网

Javascript 2端测试是否足够?

Javascript 2端测试是否足够?,javascript,angularjs,unit-testing,testing,tdd,Javascript,Angularjs,Unit Testing,Testing,Tdd,我的问题主要是关于测试方法。 我为一个实践TDD(测试驱动开发)的组织工作。我们使用AngularJS及其完整的测试堆栈—Jasmine进行单元测试,并使用量角器进行e2e测试 当开发一个特性时,我们的过程首先是编写一个失败的e2e测试,然后使用TDD编写特性。这些测试只针对公共方法编写(无论是针对控制器/指令/服务)。 产品本身不包含任何复杂的逻辑(除了几个例外)。 最近,我们开始讨论这样一个事实:为控制器编写单元测试毫无意义,因为它们公开了功能,100%的功能都暴露在视图中,并且使用e2e测

我的问题主要是关于测试方法。 我为一个实践TDD(测试驱动开发)的组织工作。我们使用AngularJS及其完整的测试堆栈—Jasmine进行单元测试,并使用量角器进行e2e测试

当开发一个特性时,我们的过程首先是编写一个失败的e2e测试,然后使用TDD编写特性。这些测试只针对公共方法编写(无论是针对控制器/指令/服务)。 产品本身不包含任何复杂的逻辑(除了几个例外)。 最近,我们开始讨论这样一个事实:为控制器编写单元测试毫无意义,因为它们公开了功能,100%的功能都暴露在视图中,并且使用e2e测试。基本上,单元测试和e2e测试是重叠的。 起初我们都同意,但后来这个决定打开了潘多拉盒子。 毕竟,指令也是如此。那么为什么还要测试它们呢? 然后,服务的问题出现了。他们中的大多数人(98%)只是打一个后端电话,然后返回响应。那么,为什么不简单地模拟httpBackend并在测试控制器时测试服务呢?控制器是通过e2e测试的

你明白了

尽管单元测试和e2e测试实际上是重叠的,但我确实看到了它们的好处。主要是即时反馈和“可执行文档”。
你在练习什么?您是否看到了其他好处?是否“榨汁值得”?是否值得为最简单的实现编写重叠测试,以获得上述两个好处?

这是一个大主题,并不是一个真正有权威答案的问题,但我将尽我所能涵盖几点

首先,您应该考虑测试的目的。根据,单元测试的存在主要是为了支持团队。它们通常是在产品附近编写的(例如,使用TDD,可能是由开发人员自己编写的),并且有助于增加开发人员的信心,即他们没有因为最后的更改而破坏任何东西。有了这种信心,开发人员可以高效地工作,并使用不计后果的abadon(TDD梦想)进行重构。单元测试没有回答“这是否适合我们客户的目的”的问题,但这不是它们存在的原因

功能测试(e2e,如果我理解你的描述的话)仍然支持团队快速扭转测试结果,但实际上已经开始回答“用户能做这件事吗?”。您正在测试用户看到的内容,并开始以对用户有意义的方式测试您的实际产品

象限3和象限4开始讨论产品是否做得好(即它是否适合用途,而不仅仅是功能),但这是另一个主题

基于对测试的理解,部分答案取决于您的团队结构。你有独立的开发和测试团队吗?如果是这样,您的开发人员编写单元测试(毕竟是为了他们的利益)以及测试团队独立处理其他象限(包括编写他们认为合适的e2e)可能是有意义的。如果您的测试和开发团队是相同的?如果您可以从功能/e2e测试中获得与单元测试类似的周转时间(编写的测试->有用的结果),那么关注它们并在不重叠的情况下收获这两种方法的回报可能是有意义的

我给出的简短回答是简单地问“我们从这次测试中得到了什么好处?”。如果您发现测试的答案重叠,那么删除冗余可能是有意义的


上面的几点和其他几点已经讨论过了,所以我现在不再漫无边际了。

嗨,史蒂夫。非常感谢您周到详细的答复。今天晚些时候我会看你们提到的文章,因为它们似乎是正确的。当然,我会有后续的问题。我想澄清你对“周转时间”的定义。您的意思是开发人员在出现问题时收到反馈所需的时间吗?如果是这样的话,差异是巨大的(主要是因为浏览器实际参与其中)。在我看来,与e2e不重叠的单元测试的好处是a)即时反馈b)各种应用程序组件的可执行文档;单元测试应该有较短的周转时间,通常是从按下“运行”到返回“通过”或“失败”结果的几秒钟或更短时间。相比之下,负载测试之类的测试可能需要很多天或几周才能运行。在您的情况下,单元测试通过对开发团队的更改提供快速反馈,似乎对开发团队很有好处,而e2e测试也没有达到这一特定目的,如果写一个好的代码是一个观点,那么你可以删除它,但是你也可以写关于设计模式的问题和更多的高级问题。虽然我理解你的担忧,但我的问题是关于方法论的,这些问题从来没有一个合适的答案。即使方法论定义得很好,但每个人的实践方式都不同,我的问题是让其他人分享他们在测试方法论方面的实践和经验。为此,必须引发讨论。一旦成功了,结果很可能是你正在寻找的一个答案。