【发布时间】:2016-05-21 16:08:24
【问题描述】:
使用 RSpec 测试 Rails 模型验证,而不测试 AR 本身
让我们设置模型User:
class User < ActiveRecord::Base
validate :name, presence: true, uniqueness: { case_sensitive: false }, on: :create
validate :password, presence: true, format: { with: /\A[a-zA-z]*\z/ }
end
查看几种测试方法:
it { expect(user).to validate_presence_of(:name).on(:create) }
或
it do
user = User.create(name: '')
expect(user.errors[:name]).to be_present
end
我的主要问题是哪种方法更好,为什么?可以建议我不同的方法吗?
其他问题:
- 我应该测试多少?例如,我可以为正则表达式编写这么多测试,但维护起来会很麻烦。
- 您认为此示例中的完整测试覆盖率有多少?
【问题讨论】:
-
仅供参考,
validate_presence_of匹配器不是 RSpec 内置的,它是由 shoulda-matchers gem 添加的:github.com/thoughtbot/shoulda-matchers -
第一种更紧凑更好,它暗示了第二种方法的功能
标签: ruby-on-rails ruby unit-testing testing rspec