Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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 railstutorial.org-未定义的方法`工厂';_Ruby On Rails_Factory Bot - Fatal编程技术网

Ruby on rails railstutorial.org-未定义的方法`工厂';

Ruby on rails railstutorial.org-未定义的方法`工厂';,ruby-on-rails,factory-bot,Ruby On Rails,Factory Bot,我正在尝试学习railstutorial.org,目前正在阅读第7章,在该章中,您将开始使用工厂: 我正在使用Rails 3.0.1和ruby-1.9.2-p0 我不能让我的rspec测试通过,我得到的错误是 Failures: 1) UsersController GET 'show' should be successful Failure/Error: @user = Factory(:user) undefined method `Factory' for #

我正在尝试学习railstutorial.org,目前正在阅读第7章,在该章中,您将开始使用工厂:

我正在使用Rails 3.0.1和ruby-1.9.2-p0

我不能让我的rspec测试通过,我得到的错误是

Failures:
    1) UsersController GET 'show' should be successful
     Failure/Error: @user = Factory(:user)
     undefined method `Factory' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_1:0x00000101cc5608>
 # ./spec/controllers/users_controller_spec.rb:9:in `block (3 levels) in <top (required)>'
这是我的
users\u controller\u spec.rb
文件:

require 'spec_helper'

describe UsersController do
  render_views

  describe "GET 'show'" do
    before(:each) do
      @user = Factory(:user)
    end
    it "should be successful" do
      get :show, :id => @user
      response.should be_success
    end
这是我的Gemfile,如果有帮助的话:

source 'http://rubygems.org'

gem 'rails', '3.0.1'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'sqlite3-ruby', :require => 'sqlite3'
gem 'gravatar_image_tag'

group :development do
  gem 'rspec-rails'
  gem 'annotate-models'
end

group :test do
  gem 'rspec'
  gem 'webrat'
  gem 'spork'
  gem 'factory_girl_rails'
end

也许你应该试试新的语法(见工厂女孩)


我收到了完全相同的错误消息。我刚刚重新启动了我的Spork服务器和自动测试,一切都变绿了。

对于我来说,我不得不将
要求“factory\u girl”
添加到
测试助手.rb
我遇到了这个问题,但这是因为我将factory girl gem放在了gem文件的开发部分而不是测试部分。一旦进入测试区,它就工作了。我注意到我的条目和你的条目之间的一个区别是,我的条目指定了1.0:

group :test do
  gem 'rspec-rails', '2.6.1'
  gem 'webrat', '0.7.1'
  gem 'factory_girl_rails', '1.0'
end

我的解决方案:我不小心将它包含在
:development
块中,只需将它移动到
:test


(我在这里列出了它,因为它可能会帮助那些没有正确遵循教程的人)

我决定使用最新版本的Factory Girl,所以我尝试修改代码。不适合我,所以我用了

gem 'factory_girl_rails', '1.0'
在文件中,将版本锁定为1.0

bundle update

重新启动spork和autotest,它就工作了。

根据最新版本的Factory Girl(当前为v4.0.0) 重写工厂.rb

FactoryGirl.define do 
  factory :user do
    name                  "Michael Hartl"
    email                 "mhartl@example.com"
    password              "foobar"
    password_confirmation "foobar"
  end
end
然后从用户控制器规格中调用它,如下所示:

FactoryGirl.create(:user)
在您的规格中使用

  @user = FactoryGirl(:user)
而不是

  @user = Factory(:user)
我已经这样做了, 将
require'factory\u girl'
添加到
test\u helper.rb

@user = FactoryGirl.create(:user)

对于那些现在找到这个页面的人:注意你曾经在哪里使用过“FactoryGirl”,现在你必须在测试中使用“FactoryBot”。从thoughtbot公告页面:

“我们将factory_girl重命名为factory_bot(factory_girl_rails更名为 工厂机器人轨道)。所有工厂女孩相同的功能,现在 用不同的名字。”

详情如下:


+1这解决了教程中FactoryGirl版本的问题。使用FactoryGirl代替FactoryGirl(:user)。隐式调用@Postscriptercreate建议的创建(:user)
  @user = Factory(:user)
@user = FactoryGirl.create(:user)