railstutorial.org - неопределенный метод `Фабрика ' - PullRequest
9 голосов
/ 21 октября 2010

Я пытаюсь следовать railstutorial.org, и сейчас я нахожусь в главе 7, где вы начинаете использовать фабрики: http://railstutorial.org/chapters/modeling-and-viewing-users-two#sec:tests_with_factories

Я использую 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)>'

my factories.rb выглядит так:

# By using the symbol ':user', we get Factory Girl to simulate the User model.
Factory.define :user do |user|
  user.name                  "Michael Hartl"
  user.email                 "mhartl@example.com"
  user.password              "foobar"
  user.password_confirmation "foobar"
end

и это мой users_controller_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

Ответы [ 10 ]

21 голосов
/ 02 сентября 2012

В соответствии с последней версией Factory Girl (в настоящее время v4.0.0) переписать factories.rb

FactoryGirl.define do 
  factory :user do
    name                  "Michael Hartl"
    email                 "mhartl@example.com"
    password              "foobar"
    password_confirmation "foobar"
  end
end

, затем вызвать его из спецификаций контроллера вашего пользователя следующим образом:

12 голосов
/ 02 января 2011

Я получил то же самое сообщение об ошибке.Я только что перезапустил свой сервер Spork и Autotest, и все стало для меня зеленым.

7 голосов
/ 21 октября 2010

Может быть, вам следует попробовать новый синтаксис (см. github readme фабричной девушки)

FactoryGirl.define :user do |user|
  user.name                  "Michael Hartl"
  user.email                 "mhartl@example.com"
  user.password              "foobar"
  user.password_confirmation "foobar"
end
3 голосов
/ 05 ноября 2012

В вашей спецификации используйте

  @user = FactoryGirl(:user)

вместо

  @user = Factory(:user)
2 голосов
/ 21 января 2012

У меня была эта проблема, но это было потому, что я поместил заводской драгоценный камень под разделом разработки вместо тестового раздела Gemfile. Оказавшись под тестовым разделом, все заработало. Одно из замечаний, которое я отмечаю между моей записью и вашей, заключается в том, что в моей записи указано 1.0:

group :test do
  gem 'rspec-rails', '2.6.1'
  gem 'webrat', '0.7.1'
  gem 'factory_girl_rails', '1.0'
end
0 голосов
/ 28 мая 2018

Для тех, кто находит эту страницу сейчас: обратите внимание, где вы когда-то использовали «FactoryGirl», теперь вы должны использовать «FactoryBot» в своих тестах.Со страницы объявления thinkbot:

"Мы переименовываем factory_girl в factory_bot (и factory_girl_rails в factory_bot_rails). Все те же функциональные возможности factory_girl, теперь под другим именем."

Подробнее здесь:

https://robots.thoughtbot.com/factory_bot

0 голосов
/ 15 января 2014

Я сделал так, добавив require 'factory_girl' к test_helper.rb и

@user = FactoryGirl.create(:user)
0 голосов
/ 19 августа 2012

Я решил использовать новейшую версию Factory Girl, поэтому я попытался адаптировать код.У меня не сработало, поэтому я использовал

gem 'factory_girl_rails', '1.0'

в Gemfile, чтобы заблокировать версию на 1.0

bundle update

, перезапустить spork и автотест, и это сработало.

0 голосов
/ 04 марта 2012

Мое решение: я случайно включил его в блок :development, и мне просто пришлось переместить его в блок :test

(я перечислил его здесь, потому что он может кому-то помочькто не следует учебнику правильно)

0 голосов
/ 07 ноября 2011

Для меня мне пришлось добавить require 'factory_girl' к test_helper.rb

...