gpt4 book ai didi

ruby-on-rails - 这种长度验证在 Ruby on Rails 中是如何工作的?

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:05 24 4
gpt4 key购买 nike

我正在学习 Michael Hartl 的 Rails 教程。在 chapter 6我们正在为用户名和电子邮件创建长度验证测试。

在他说要写的test/models/user_test.rb文件中

test "name should not be too long" do
@user.name = "a" * 51
assert_not @user.valid?
end

然后在 app/models/user.rb 中我们放入

class User < ActiveRecord::Base 
validates :name, presence: true, length: { maximum: 50 }

我的问题是,测试如何确保名称不超过 60 个字符?我知道验证说最大长度为 50,但测试说如果 user.name 等于 51 个字符...不大于或等于,则断言用户无效。

老实说,我不明白为什么你需要 user.rb 中的验证和测试文件之间的关系,所以这可能就是我感到困惑的原因。

最佳答案

在测试中,您需要确保您的代码按预期执行所有操作。在这种情况下,您无法使用长度超过 50 个符号的 name 保存用户。这就是为什么在测试中您要检查用户是否因 name length == 51 符号而变得无效。

但是您也说对了,此测试并不能保证名称长度为 60 的用户也无效。它也不会检查 50 是否是最大值,因为它将传递给

validates :name,  presence: true, length: { maximum: 1 }

例如。但是您可能不希望您的应用程序表现得像这样。这就是为什么我也鼓励您添加另一个检查最大允许长度的原因:

@user.name = "a" * 50
assert @user.valid?

通常,如果您怀疑代码中可能有问题,您可以随意添加新测试。但在这种情况下,您实际上不应该测试代码的行为方式,因为存在/长度验证在 Rails 本身中已经过良好测试。您应该检查是否在模型中包含了此类验证并传递了正确的参数。例如,在 shoulda-matchers 中你有这些 helper :

should validate_presence_of(:name)
should validate_length_of(:name).is_at_most(50)

我不确定单元测试是否有类似物,很可能没有,所以你应该按照你这样做的方式自己测试它并假设这就足够了。

关于ruby-on-rails - 这种长度验证在 Ruby on Rails 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27664578/

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