Karma与Protractor,单元测试与端到端测试

6

有人能解释一下为什么我需要同时使用Protractor和Karma吗?快速浏览看起来它们在做同样的事情。我知道Karma是用于单元测试,而Protractor是用于端到端测试。

  • 这两种测试之间的主要区别是什么?
  • 为什么我们不使用相同的运行器/框架来完成两种测试?
  • 是否有特定的原因使用这两个框架?

我知道两者都可以使用(并且在大多数示例中使用)Jasmine框架来描述测试。

1个回答

6

单元测试定义为在隔离环境下测试单个代码单元。例如,在不涉及控制器使用的服务的情况下测试控制器,或者在不涉及发送请求到后端REST服务器的服务的情况下测试服务是一个好主意,并且能够使测试非常快速,但是所有这些测试并不能保证当所有部件组装在一起并真正与后端交互时,应用程序就像预期的那样运行。

E2e测试会将整个应用程序进行测试,它们相当于人工测试员坐在浏览器前使用应用程序来检查其是否按预期工作。Protractor是基于Selenium的一层,它允许以编程方式使用浏览器,即编写指令以点击链接、填写表单和提交表单,就像人类操作一样。


谢谢@JBNizet!这回答了我问题中的第一个点。 - DDan
如果你稍微思考一下,它实际上回答了所有这些问题。 - JB Nizet
我期待着理解它。我看到的所有 Protractor 测试示例都很类似于在这里和那里点击。在我看来,这并没有使其与 Karma 不同,我可以在 Karma 中完成所有这些操作。如果差异仅在于使用工具的方式,那么我们就不需要两个工具。这只会增加复杂性。 我正在寻找这些工具之间的真正区别以及我们需要两者的原因。是编译方式、会话维护或其他任何东西吗? - DDan
1
在Karma中,您创建单元测试,测试一个组件,并模拟其依赖项。由于karma,测试在浏览器内执行。没有请求发送到后端。您可以测试一个组件的逻辑和视图。您还可以对管道、服务或其他任何内容进行单元测试。在protractor中,测试是由NodeJS执行的,而不是由浏览器执行的,并且通过像用户一样驱动浏览器来测试整个应用程序,而不仅仅是一个组件。 - JB Nizet
2
这基本上是测试一个加油泵或断路器是否工作(单元测试)和测试一辆汽车(其中包含一个加油泵、多个断路器和许多其他部件)是否工作(端到端测试)之间的区别。 - JB Nizet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接