【问题标题】:Ruby off Rails FactoryGirl ArgumentError: wrong number of args (0 for 1)Ruby off Rails FactoryGirl ArgumentError:args 数量错误(0 代表 1)
【发布时间】:2013-11-12 19:02:52
【问题描述】:

我在运行我的规范文件时收到以下错误:

我已阅读以下问题无济于事:

我不确定我是否使用 rspec 和 factory_girl 正确设置了我的 Ruby 项目。以下是相关文件:

播放器.rb

class Player
  attr_accessor :name

  def initialize(string)
    @name = string
  end
end

players.rb(工厂)

require './player'

FactoryGirl.define do
  factory :player do
    name "Cliff Levingston"
  end
end

player_spec.rb

require 'spec_helper'

describe 'Player' do
  context 'when created' do
    it "should include a #name" do
      player1 = FactoryGirl.build :player
      # player1.name = "Gerald"
      expect(player1.name).to eql "Cliff Levingston"
    end
  end
end

宝石文件

source 'hhtps://rubygems.org'

gem 'guard'
gem 'guard-shell'
gem 'rspec'
gem 'factory_girl', '~> 4.0'
gem 'rb-fsevent', '~> 0.9'

Gemfile.lock

GEM
  remote: hhtps://rubygems.org/
  specs:
    activesupport (4.0.1)
      i18n (~> 0.6, >= 0.6.4)
      minitest (~> 4.2)
      multi_json (~> 1.3)
      thread_safe (~> 0.1)
      tzinfo (~> 0.3.37)
    atomic (1.1.14)
    celluloid (0.15.2)
      timers (~> 1.1.0)
    coderay (1.0.9)
    diff-lcs (1.2.5)
    factory_girl (4.3.0)
      activesupport (>= 3.0.0)
    ffi (1.9.3)
    formatador (0.2.4)
    guard (2.2.3)
      formatador (>= 0.2.4)
      listen (~> 2.1)
      lumberjack (~> 1.0)
      pry (>= 0.9.12)
      thor (>= 0.18.1)
    guard-shell (0.5.1)
      guard (>= 1.1.0)
    i18n (0.6.5)
    listen (2.2.0)
      celluloid (>= 0.15.2)
      rb-fsevent (>= 0.9.3)
      rb-inotify (>= 0.9)
    lumberjack (1.0.4)
    method_source (0.8.2)
    minitest (4.7.5)
    multi_json (1.8.2)
    pry (0.9.12.2)
      coderay (~> 1.0.5)
      method_source (~> 0.8)
      slop (~> 3.4)
    rb-fsevent (0.9.3)
    rb-inotify (0.9.2)
      ffi (>= 0.5.0)
    rspec (2.14.1)
      rspec-core (~> 2.14.0)
      rspec-expectations (~> 2.14.0)
      rspec-mocks (~> 2.14.0)
    rspec-core (2.14.7)
    rspec-expectations (2.14.4)
      diff-lcs (>= 1.1.3, < 2.0)
    rspec-mocks (2.14.4)
    slop (3.4.6)
    thor (0.18.1)
    thread_safe (0.1.3)
      atomic
    timers (1.1.0)
    tzinfo (0.3.38)

PLATFORMS
  ruby

DEPENDENCIES
  factory_girl (~> 4.0)
  guard
  guard-shell
  rb-fsevent (~> 0.9)
  rspec

spec_helper.rb

require 'rspec'
require 'factory_girl'

RSpec.configure do |config|
  # FactoryGirl
  FactoryGirl.find_definitions

  # Use color in STDOUT
  config.color_enabled = true

  # Use color not only in STDOUT but also in pagers and files
  config.tty = true

  # Use the specified formatter
  config.formatter = :documentation # :progress, :html, :textmate

  # Run specs in random order to surface order dependencies. If you find an
  # order dependency and want to debug it, you can fix the order by providing
  # the seed, which is printed after each run.
  #     --seed 1234
  config.order = "random"
end

我想更好地了解我省略或需要添加的内容以删除 ArgumentError(0 代表 1)。

提前致谢。

【问题讨论】:

  • 你可以尝试删除require './player'
  • 您好 dmitri.com,尽管 Eugene 正确回答了我的问题。为了理解起见,我尝试了您提到的内容。当我在 player.rb 文件中删除 require './player' 时,我收到 NameError: uninitialized constant Player。

标签: ruby factory-bot rspec2


【解决方案1】:

我认为问题在于您的播放器模型在初始化时需要参数。

试试这个:

class Player
  attr_accessor :name

  def initialize(options={})
    @name = options[:name]
  end
end

FactoryGirl 初始化模型时,它会使用 nil name 属性进行初始化,如下所示:

1.9.3p448 :013 > Player.new
#<Player:0x000000017acff0 @name=nil>

然后您可以在注释掉的行中定义您想要的名称。这也将允许您使用如下哈希初始化 Player

1.9.3p448 :012 > Player.new(name: "something")
#<Player:0x00000003b53008 @name="something">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 2015-06-27
    • 2012-03-28
    相关资源
    最近更新 更多