Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 尝试使用Factory Girl运行Rspec时测试失败_Ruby On Rails_Ruby_Testing_Rspec_Tdd - Fatal编程技术网

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

Ruby on rails 尝试使用Factory Girl运行Rspec时测试失败,ruby-on-rails,ruby,testing,rspec,tdd,Ruby On Rails,Ruby,Testing,Rspec,Tdd,在尝试将工厂女孩纳入我的项目时,我遇到了一个似乎无法解决的错误。我编写了一个测试,检查我的用户的名字是否为空: # 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)

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

# 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) 没有名字的用户无效 失败/错误:期望(用户).有(1).错误(:名字) 应为1个错误:第一个\u名称,得到2个 #./spec/models/user_spec.rb:7:in'block(2层)in'

下面是我的
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个错误:第一个\u名称,得到2个


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

要调试它,只需打印错误即可

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

因此,检查我的用户模型时,我认为第二个错误是我在模型中错误地设置了两次状态验证。奇怪的是,在我的测试中使用
将user.errors.messages[:first\u name]
与之前给出的错误消息完全相同。如果正确的话,这个答案可能会对其他用户有所帮助。我将更新我的问题以反映它,并在修改后标记为正确。