gpt4 book ai didi

javascript - 如何为(Angularjs)Web 应用程序进行集成测试

转载 作者:IT老高 更新时间:2023-10-28 21:59:12 26 4
gpt4 key购买 nike

我正在开发一个 Web 应用程序。它由 2 个部分组成。一个 Node 休息服务器和一个 angularjs 客户端。

应用的结构是这样的:Rest Server <--> Api Module <--> Angular App

服务器目前经过良好测试。我有单元测试和集成测试。集成测试正在访问一个真实的数据库并通过 http 调用其余的 api。我认为这是服务器测试所能达到的最高水平。集成测试也运行得很快。我非常有信心测试服务器的方式足以满足我的用例,并且我对结果感到满意。

但是我正在努力如何测试 angularjs 应用程序。我对相关指令和模块进行了单元测试。写这些不是问题。

我想编写涵盖用户场景的集成测试。类似于注册场景:用户访问网站,进入注册表单,然后提交包含数据的表单。

angularjs 团队正在从 ng-scenariosprotractor .Protractor 正在使用 Selenium 运行测试。因此有两个范围:应用范围和测试范围。

现在我可以想到我可以使用的三种不同的抽象。而且我不确定哪一个最适合我。

  • 模拟 Api 模块
  • 模拟 Rest 服务器
  • 使用完整的服务器

模拟 API 模块

在这种情况下,我不需要设置服务器。所有交互都在浏览器中运行

优势:

  • 无需服务器

缺点:

  • 该 api 在浏览器范围内,我必须对其进行篡改。

我真的很喜欢这个解决方案,但我发现很难模拟 Api。需要在浏览器范围内修改 Api。因此我需要将修改从测试发送到浏览器。这个can be done ,但是我看不到如何在测试范围内运行诸如 mockedApi.method.wasCalledOnce() 之类的断言

模拟 Rest 服务器

优势:

  • 客户将保持不变
  • 只需处理一个范围

缺点:

  • 必须设置休息路线

我可以在 nodejs 中创建一个完整的 Mock Rest Server。 Protractor 测试是用nodejs编写的,因此可以在测试中完成对服务器的控制。在我运行测试之前,我可以告诉服务器如何响应。像这样的东西: server.onRequest({method: 'GET', url: '/'}).respondWith('hello world')

然后我可以做像 wasCalledOnce

这样的断言

将完整的服务器与数据库一起使用

每个测试都在一个完整的服务器上运行,并且可以将元素添加到数据库中。每次测试后,可以查看数据库中的预期元素

优势:

  • 可以肯定,如果这些测试正在运行,则应用在测试用例中的功能正常

缺点:

  • 我已经对其余服务器进行了相当激烈的集成测试。这感觉就像再次做同样的事情。
  • 设置取决于完整的服务器

目前的结论

  • 模拟 Api 会完全分离服务器和客户端。
  • 使用 Mock Api 将是更高级别的测试,但需要假服务器
  • 进行完整的集成测试可以获得最佳的可靠性,但这也高度依赖于服务器代码

我应该选择什么?你会怎么做?

最佳答案

我想我在 Protractor google 小组中回答了同样的问题。我和你的想法很相似,不想要服务器,但想要我的所有测试代码在一个地方(在 Protractor 中),而不是在 Protractor 和浏览器之间拆分。为了实现这一点,我自己动手并为在 Protractor 中运行的 $httpBackend 服务开发了一个代理。它允许配置 $httpBackend 服务,就好像它在 Protractor 中运行一样。我已经研究了一段时间了,目前它的功能相当齐全。如果您能看一下并让我知道我是否遗漏了任何重要的东西,那就太好了。

https://github.com/kbaltrinic/http-backend-proxy

关于javascript - 如何为(Angularjs)Web 应用程序进行集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19078962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com