【问题标题】:Rails form testing: post directly or through form?Rails 表单测试:直接发布还是通过表单发布?
【发布时间】:2018-09-28 23:07:20
【问题描述】:
我见过的大多数 Rails 测试示例都直接发布到 url。我最近发现 Rails 支持使用 'fill_in' 和 'click_on' 来操作表单元素。
我应该直接发布还是通过表单手动提交? 手动填写表单似乎更彻底,我问的原因是,我看到的所有示例都是发布的直接地。显然,直接发布可能会少一些工作,但我很好奇我可能会遗漏哪些案例。有最佳做法吗?
【问题讨论】:
标签:
ruby-on-rails
testing
ruby-on-rails-5
【解决方案1】:
您有不同级别的测试,各有各的取舍。您所描述的是可以称为与浏览器的集成测试,它们具有这些特征
- 非常黑盒,因此您执行一系列步骤(登录、填写一些元素、单击提交)并断言影响(在屏幕上显示一条消息,表明它已创建并且您会看到一些证明)。
- 这些测试通常与速度较慢和可靠性较低(错误警报)有关,但可以让您非常确定某些东西在多个系统(Rails 应用服务器、浏览器中的 JavaScript、数据库、缓存、其他服务)之间确实有效
这与单元测试形成鲜明对比,单元测试更断言系统的一小部分可以工作。就像类上的某些方法可以正常工作。在您的示例中,这可能是断言您的模型能够接受一些设置的属性并保存。这允许您通过模拟/存根隔离您的依赖关系。这些通常更快、更可靠,但它们让您不太确定一切都按预期工作。
有一些变量,但通常除非它是一个疯狂的高价值表单,否则我通常只会测试模型验证以及使用可能导致问题的特定参数调用的任何表单对象。