ruby-on-rails - Rails 表单测试:直接发布还是通过表单发布?
问题描述
我见过的大多数 Rails 测试示例都直接发布到 url。我最近发现 Rails 支持使用 'fill_in' 和 'click_on' 来操作表单元素。
我应该直接发布还是通过表单手动提交?手动填写表格似乎更彻底,我问的原因是,我看到的所有示例都是直接发布的。显然,直接发布可能会少一些工作,但我很好奇我可能会遗漏哪些案例。有最佳实践吗?
解决方案
你有不同级别的测试,有它们的权衡。您所描述的是可以称为与浏览器的集成测试,它们具有这些特征
- 非常黑,所以您执行一系列步骤(登录,填写一些元素,单击提交)并断言影响(在屏幕上显示一条消息,表明它已创建并且您会看到一些证明)。
- 这些测试通常与速度较慢和可靠性较低(错误警报)有关,但可以让您非常确定某些东西在多个系统之间确实有效(rails 应用服务器、浏览器中的 javascript、数据库、缓存、其他服务)
这与单元测试形成鲜明对比,单元测试更断言系统的一小部分可以工作。就像类上的某些方法可以正常工作。在您的示例中,这可能是断言您的模型能够接受一些设置的属性并保存。这允许您通过模拟/存根隔离您的依赖项。这些通常更快、更可靠,但它们让您不太确定一切都按预期工作。
有一些变量,但通常除非它是一个疯狂的高价值表单,否则我通常只会测试模型验证以及使用可能导致问题的特定参数调用的任何表单对象。
推荐阅读
- http - HTTP KeepAlive 可以作为 TCP KeepAlive 的替代品吗?
- python - 使用numpy数组时如何处理itertools.product?
- c# - 为什么在使用 VS Installer 时出现“无法加载文件或程序集”?
- android - 无法在 Playstore 中按应用名称找到应用
- vb.net - VB.NET:如何将所需数据从 Datagrid 视图 ComboBoxColumn 自动填充到另一个 ComboBoxColumn
- powershell - 使用 wgrib2 将 grib2 转换为 netcdf:批量问题
- r - R中滞后的单列移位值
- c++ - 如何在没有错误的情况下获取朋友类的模板函数
- r - 无法编译包“地图”
- r - 使用 case_when 进行字符串匹配的多种模式