ArgumentError:参数数量错误(1表示0)

时间:2016-12-21 12:49:08

标签: ruby-on-rails rspec factory-bot rspec-rails

那么我们如何解决初始化函数中的错误,需要采取哪些措施来消除此错误

  

这是Factories / user.rb

FactoryGirl.define do
  factory :user do |u|
    u.first_name Faker::Name.first_name
    u.last_name Faker::Name.last_name
    u.email Faker::Internet.email
    u.username Faker::Name.name
    u.title Faker::Name.title
    u.password "hellohello"
    u.password_confirmation "hellohello"
 end
end
  

这是模式规范模型/ user_spec.rb

require 'rails_helper'

RSpec.describe User, :type => :model do

  user = ''
  describe "create" do
    user = FactoryGirl.create(:user)
  end
  #describe "validations"
  describe "Count all the user" do
    it "should have one item created before being created" do
      #binding.pry
      expect(User.all.count).to eq(1)
    end
 end
end 

在测试模型user_spec.rb模型时,它会给出错误: enter image description here

1 个答案:

答案 0 :(得分:0)

改变这个:

u.first_name Faker::Name.first_name
u.last_name Faker::Name.last_name
u.email Faker::Internet.email
u.username Faker::Name.name
u.title Faker::Name.title

对此:

u.first_name {Faker::Name.first_name}
u.last_name {Faker::Name.last_name}
u.email {Faker::Internet.email}
u.username {Faker::Name.name}
u.title {Faker::Name.title}

这将导致Ruby每次重新评估对Faker的调用,每次都会生成各种值。

请注意,仍有可能发生冲突,因为Faker :: email每次都会生成相同的电子邮件。我建议使用序列代替具有唯一约束的字段。像这样:

   sequence(:email) { |n| "person#{n}@example.com" }
   sequence(:username, 1000) { |n| "user#{n}" }