尝试使用Factory Girl运行Rspec时测试失败

时间:2014-10-08 23:33:34

标签: ruby-on-rails ruby testing rspec tdd

在尝试将Factory Girl纳入我的项目时,我遇到了一个错误,我似乎无法解决。我写了一个测试,检查我的用户的名字是否为空:

# spec/models/user_spec.rb

require 'rails_helper'

RSpec.describe User, :type => :model do
  it 'is invalid without a first name' do
    user = FactoryGirl.build(:user, first_name: nil)
    expect(user).to have(1).errors_on(:first_name)
  end
end

不幸的是,当我尝试运行此测试时,我收到此错误:

  

1)没有名字的用户无效          失败/错误:期望(用户).to(1).errors_on(:first_name)            预期的1个错误:first_name,得2       #。/ spec / model / user_spec.rb:7:在'

中的块(2级)

这是我的factories.rb文件的样子:

# spec/factories.rb

FactoryGirl.define do
  factory :user do
    first_name "John"
    last_name "Doe"
    sequence(:email) {|n| "johndoe#{n}@example.com"}
    password "secret"
  end
end

如果它在这里有帮助我的gemfile是如何设置的:

group :development, :test do
  gem 'rspec-rails'
  gem 'rspec-collection_matchers'
  gem 'factory_girl_rails'
end

更新

检查我的用户模型后,我认为第二个错误是我错误地在我的模型中设置了状态验证两次:

validates :first_name, :last_name, :email, :password, presence: true
validates :first_name, :last_name, presence: true, format: {with: /\A([^\d\W]|[-])*\Z/, message: 'cannot have any numbers or special characters'}

我现在想知道的是一种让rspec以某种方式指出我所处理的错误而非模糊地告诉我的方法:

  

预计会出现1个错误:first_name,得到2

1 个答案:

答案 0 :(得分:0)

您的用户似乎在first_name字段上有2个错误

要调试它,您只需打印错误

RSpec.describe User, :type => :model do
  it 'is invalid without a first name' do
    user = FactoryGirl.build(:user, first_name: nil)

    puts user.errors.messages[:first_name]

    expect(user).to have(1).errors_on(:first_name)
  end
end