【问题标题】:Should Rails controllers be tested for validations?Rails 控制器是否应该进行验证测试?
【发布时间】:2018-08-09 19:03:15
【问题描述】:

我有一个关于应该在 Ruby on Rails 应用程序中测试控制器的哪些部分的问题。任何帮助将不胜感激。

当我创建需要验证的新模型(例如 validates :name, presence: true)时,我总是为这些模型编写测试。例如(如果模型名称是用户):

test "name should be present" do
    assert_not User.new({ name: nil }).valid?
end

但是,我也有一个“与”模型“配套”的控制器(例如用户)。即使我已经在测试模型,我是否还应该测试控制器是否验证其参数?

例子:

test "invalid user should not be created" do
    assert_no_difference "User.count" do
        post random_models_path, store: { name: " " }
    end
end

我肯定仍会测试 有效 商店 是否已创建,但我应该检查 无效 商店是否 没有创建?

谢谢

编辑

仅针对可能的无效案例之一测试控制器是否是个好主意,因为如果该案例成功,那么我知道模型验证可能正在工作?

【问题讨论】:

  • 就个人而言,即使在模型中,我也看不出测试验证效果的意义。我所做的大部分工作是验证验证那里。 it { is_expected.to validate_presence_of :name }。为什么要花精力重复 activerecord 的测试?
  • 我可以在 minitest 中而不是 rspec 中做同样的事情 (it { is_expected.to validate_presence_of :name }) 吗?
  • 你可能可以,但我不知道怎么做。 :)

标签: ruby-on-rails ruby testing


【解决方案1】:

仅针对一种可能的无效情况测试控制器是否是个好主意,因为如果该情况成功,那么我知道模型验证可能正在工作?

这是正确的想法,通常也是我所做的。无需在控制器中测试所有可能的验证状态组合,但最好测试两个一般条件:

1) 对于一个有效的模型,我们是否保存它并重定向到我们应该去的地方? (或者我们是否呈现正确的响应?)

2) 对于无效模型(由于任何可能的原因它可能无效),我们是否以用户可以更正错误的方式重新呈现表单。

【讨论】:

  • 这是完美的。非常感谢!
猜你喜欢
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 2019-12-29
相关资源
最近更新 更多