【问题标题】:How to test server side validation in AngularJS applications如何在 AngularJS 应用程序中测试服务器端验证
【发布时间】:2015-06-22 12:45:14
【问题描述】:

我正在开发一个 Spring + AngularJS 1.x 应用程序。对于测试自动化,我正在考虑使用像 Selenium 这样的功能测试工具。

可以使用该工具轻松测试客户端表单验证。但我想知道如何测试服务器端验证。如果 AngularJS 有一些设置,可以禁用客户端验证,那么我的相同测试脚本可以用于服务器端测试。否则,我认为我将不得不使用单独的 API 测试工具编写服务器测试脚本。这不仅会加倍努力,而且我还必须使用 CORS、CSRF 等进行模拟,这可能不是一个很好的现实检查。

喜欢听取建议。

(注意:在 AngularJS 中,如果我们提交表单,即使显示客户端错误,AngularJS 也不会填充字段)

【问题讨论】:

  • 您测试两个完全不同的东西,只是碰巧共享一些数据。编写一些 JUnit 测试或任何你用来测试 Spring 应用程序的东西。服务器不应该关心你的客户端测试,你的客户端测试也不应该关心服务器(你应该模拟服务器)。
  • 但是,我认为将它作为一个完整的应用程序而不是两个不同的东西进行测试,这样我就不用在服务器端重复许多测试用例了。此外,更接近现实,它将更加防错。我认为,如果 AngularJS 支持禁用验证,那就太好了。
  • 您认为您会节省自己的时间,但最终只会使您的测试环境复杂化,并且更难破译实际发生问题的位置。当我为客户端代码编写测试时,我希望它们在我每次进行更改时运行,给我实时反馈 - 涉及服务器可能会减慢你的速度。如果你想测试请求的延迟怎么办?如果加入团队的人对 Spring 一无所知,但需要一个完整的堆栈,只是为了执行客户端测试?
  • 我明白了,但是我们不需要详尽的端到端系统测试?或者您的意思是我们需要所有这些:客户端、服务器和系统测试?
  • 在完整的 e2e 测试中,很难模拟数据库或第三方服务不可用,或者有人摆弄一些 JSON,而创建高质量的单元测试可以很容易地伪造/模拟非常广泛的场景。简而言之,是的,以上所有。在我们的团队中,首席测试员构建了各种 Selenium 脚本来检查每个产品场景,但是当数据库连接失败时他不会检查日志是否被写入,这取决于我的单元测试,所以从这个意义上说它不会详尽,合理。

标签: angularjs spring selenium testing


【解决方案1】:

是的,您可以使用以下黑客方法禁用 客户端验证

首先你需要使用JavascriptExecutor 并编写一个函数从您的元素中删除 required 属性

  ((JavascriptExecutor)driver).executeScript("document.getElementById("city").required = false;");

运行此代码后,您的客户端验证将被禁用,所有验证都来自服务器端。

【讨论】:

  • 看起来有点像。谢谢,哈桑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
相关资源
最近更新 更多