ruby-on-rails - Rails - FactoryGirl - 测试模型 [验证]

标签 ruby-on-rails validation testing factory-bot faker

我想测试我的模型,但我能找到的所有信息似乎都已过时。我的目标是测试每个单独的验证。 我的模型:

class Author < ActiveRecord::Base
  has_and_belongs_to_many :books
  before_save :capitalize_names
  validates :name, :surname, presence: true, length: { minimum: 3 },
  format: { with: /[a-zA-Z]/ }


  private
  def capitalize_names
    self.name.capitalize!
    self.surname.capitalize!
  end
end

和我的女工厂定义:

FactoryGirl.define do
  factory :author do |f|
    f.name { Faker::Name.first_name }
    f.surname { Faker::Name.last_name }
  end
end

所以现在,我想测试name是否不短于3个字符。

我的背景:

  context 'when first name is too short' do
    it { expect( FactoryGirl.build(:author, name: 'Le')).to 
      be_falsey }
    end

我知道它是无效的,因为 [FactoryGirl.build(:author, name: 'Le')] 返回哈希而不是 bool 值。那么现在,我应该如何测试呢?我应该使用什么匹配器?

最佳答案

[已解决]

使用 be_valid 而不是 be_falsey。现在它应该看起来像:

 context 'when first name is too short' do
    it { expect( FactoryGirl.build(:author, name: 'Le')).not_to
    be_valid }
  end

关于ruby-on-rails - Rails - FactoryGirl - 测试模型 [验证],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31509632/

相关文章:

ruby-on-rails - Searchkick 和正则表达式

java - JUnit 在测试中捕获异常

Android 测试 - 如何验证 navController.currentDestination.arguments?

ruby-on-rails - 无法构建 gem native 扩展。 + rake 失败,退出代码 1

ruby-on-rails - 如何使用外键定义 activerecord 和 activeresource 之间的关系?

javascript - 我在哪里可以学习如何在 Ruby on Rails 中制作 Javascript 支持的下拉菜单?

validation - 徽章 - 数据结构/模型?

java - 将 ConstraintValidator 实现注册到 Constraint

php - (Laravel) 如何从用户模型中获取验证错误?

testing - 在Rally中,复制测试集时,如何将测试用例结果与测试集一起复制?