ruby-on-rails - Rails 3,FactoryGirl : wrong number of arguments (1 for 0) (ArgumentError)

标签 ruby-on-rails factory-bot

我正在研究 Ruby on Rails 教程,但在使用 FactoryGirl 进行测试时遇到问题。 这是我的错误信息:

/Users/user/Documents/code/RoR/test/sample_app/spec/factories.rb:13:in `block (2 levels) in <top (required)>': wrong number of arguments (1 for 0) (ArgumentError)
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/factory_girl-4.2.0/lib/factory_girl/syntax/default.rb:18:in `instance_eval'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/factory_girl-4.2.0/lib/factory_girl/syntax/default.rb:18:in `factory'
from /Users/user/Documents/code/RoR/test/sample_app/spec/factories.rb:12:in `block in <top (required)>'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/factory_girl-4.2.0/lib/factory_girl/syntax/default.rb:49:in `instance_eval'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/factory_girl-4.2.0/lib/factory_girl/syntax/default.rb:49:in `run'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/factory_girl-4.2.0/lib/factory_girl/syntax/default.rb:7:in `define'
from /Users/user/Documents/code/RoR/test/sample_app/spec/factories.rb:11:in `<top (required)>'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/activesupport-3.2.12/lib/active_support/dependencies.rb:245:in `load'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/activesupport-3.2.12/lib/active_support/dependencies.rb:245:in `block in load'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/activesupport-3.2.12/lib/active_support/dependencies.rb:236:in `load_dependency'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/activesupport-3.2.12/lib/active_support/dependencies.rb:245:in `load'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/factory_girl-4.2.0/lib/factory_girl/find_definitions.rb:16:in `block in find_definitions'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/factory_girl-4.2.0/lib/factory_girl/find_definitions.rb:15:in `each'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/factory_girl-4.2.0/lib/factory_girl/find_definitions.rb:15:in `find_definitions'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/factory_girl_rails-4.2.1/lib/factory_girl_rails/railtie.rb:33:in `block in <class:Railtie>'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/activesupport-3.2.12/lib/active_support/lazy_load_hooks.rb:34:in `call'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/activesupport-3.2.12/lib/active_support/lazy_load_hooks.rb:34:in `execute_hook'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/activesupport-3.2.12/lib/active_support/lazy_load_hooks.rb:43:in `block in run_load_hooks'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/activesupport-3.2.12/lib/active_support/lazy_load_hooks.rb:42:in `each'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/activesupport-3.2.12/lib/active_support/lazy_load_hooks.rb:42:in `run_load_hooks'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/railties-3.2.12/lib/rails/application/finisher.rb:59:in `block in <module:Finisher>'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/railties-3.2.12/lib/rails/initializable.rb:30:in `instance_exec'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/railties-3.2.12/lib/rails/initializable.rb:30:in `run'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/railties-3.2.12/lib/rails/initializable.rb:55:in `block in run_initializers'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/railties-3.2.12/lib/rails/initializable.rb:54:in `each'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/railties-3.2.12/lib/rails/initializable.rb:54:in `run_initializers'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/railties-3.2.12/lib/rails/application.rb:136:in `initialize!'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/railties-3.2.12/lib/rails/railtie/configurable.rb:30:in `method_missing'
from /Users/user/Documents/code/RoR/test/sample_app/config/environment.rb:5:in `<top (required)>'
from /Users/user/Documents/code/RoR/test/sample_app/spec/spec_helper.rb:51:in `require'
from /Users/user/Documents/code/RoR/test/sample_app/spec/spec_helper.rb:51:in `<top (required)>'
from /Users/user/Documents/code/RoR/test/sample_app/spec/controllers/pages_controller_spec.rb:1:in `require'
from /Users/user/Documents/code/RoR/test/sample_app/spec/controllers/pages_controller_spec.rb:1:in `<top (required)>'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/rspec-core-2.13.0/lib/rspec/core/configuration.rb:819:in `load'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/rspec-core-2.13.0/lib/rspec/core/configuration.rb:819:in `block in load_spec_files'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/rspec-core-2.13.0/lib/rspec/core/configuration.rb:819:in `each'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/rspec-core-2.13.0/lib/rspec/core/configuration.rb:819:in `load_spec_files'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/rspec-core-2.13.0/lib/rspec/core/command_line.rb:22:in `run'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/rspec-core-2.13.0/lib/rspec/core/runner.rb:80:in `run'
from /Users/user/.rvm/gems/ruby-1.9.3-p385/gems/rspec-core-2.13.0/lib/rspec/core/runner.rb:17:in `block in autorun'

这是我的工厂.rb:

FactoryGirl.define do
  factory :user do
    user.name "abc"
    user.email "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d2b3b0b192b7aab3bfa2beb7fcb1bdbf" rel="noreferrer noopener nofollow">[email protected]</a>"
    user.password "foobar"
    user.password_confirmation "foobar"
  end
end

这是我在 user_controller_spec.rb 中使用的代码:

before(:each) do
  @user = FactoryGirl.create(:user)
end

我已经尝试过之前提出的问题中的方法,但没有成功。有人可以帮助我吗?谢谢!

最佳答案

你的工厂文件应该是:

FactoryGirl.define do
  factory :user do
    name "abc"
    email "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="90f1f2f3d0f5e8f1fde0fcf5bef3fffd" rel="noreferrer noopener nofollow">[email protected]</a>"
    password "foobar"
    password_confirmation "foobar"
  end
end

这样就可以了。

您在初始版本中使用了局部变量“user”。问题是没有局部变量用户传递到 block 中或在 block 中定义。正如上面的评论者之一指出的那样 - 如果你想调用 user.name 那么你必须传递 |user|到街区。即

FactoryGirl.define do
  factory :user do |user|
  etc.

但这在 FactoryGirl 中是不必要的。您可以按照我上面输入的方式进行操作。

我建议阅读https://github.com/thoughtbot/factory_girl/wiki/Usage - 即使您只是通过教程学习 Rails(就像我一样),它也非常容易上手:-)

关于ruby-on-rails - Rails 3,FactoryGirl : wrong number of arguments (1 for 0) (ArgumentError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15580212/

相关文章:

ruby-on-rails - 有没有办法在浏览器中显示 Rails 的日志文件?

ruby-on-rails - 至少 6 个字符的密码不起作用 [rails 4]

ruby-on-rails - FactoryGirl 错误:未初始化常量 Post::user

ruby-on-rails - 工厂女孩:如何在不创建新记录的情况下将一个记录与另一个记录相关联?

ruby-on-rails - 如何使用 FactoryGirl 创建嵌入式文档?

ruby-on-rails - ActiveModel::MissingAttributeError: 无法使用 FactoryGirl 写入未知属性 `ad_id'

ruby-on-rails - 在过滤器之前设置实例变量的Rails测试 Controller 方法

mysql - Rails/SQL - 从连接查询中排除对象

ruby-on-rails - 如何在 Factory Girl Rails 中使用 Pry?

javascript - jquery 回调和 json 数据