рельсы 3.1.rc6 + factorygirl + devise + spec2 => неопределенный метод `Factory 'для # <RSpec :: Core :: ExampleGroup :: - PullRequest
0 голосов
/ 23 августа 2011

мой драгоценный файл выглядит как

source 'http://rubygems.org'
gem 'rails', '3.1.0.rc6'
gem 'sqlite3'
gem 'devise'
gem 'will_paginate'
gem 'therubyracer'
group :assets do
  gem 'sass-rails', "  ~> 3.1.0.rc"
  gem 'coffee-rails', "~> 3.1.0.rc"
  gem 'uglifier'
end
gem 'jquery-rails'

group :test do
  gem 'turn', :require => false
  gem 'rspec-rails'
  gem 'webrat'
end

group :development do
gem 'rspec-rails'
gem 'webrat'
gem 'spork'
gem 'factory_girl_rails'
gem 'capybara'
gem 'guard-rspec'
end

мои заводы.rb

Factory.define :user do |user|
  user.username              "ccc"
  user.email                 "ccc@eg.com"
  user.password              "foobar"
  user.password_confirmation "foobar"
end

Factory.define :user_hero do |hero|  
  hero.supername        "superman"
  hero.association :user
end

мой hero_controller_spec выглядит так

require 'spec_helper'

describe HerosController do
  include Devise::TestHelpers
  render_views

  before(:each) do
    @user       = Factory(:user)
    # @request.env["devise.mapping"] = :user
    # @user = Factory.create(:user)
    sign_in @user
    @hero_attr   = {
      :supername        => "superman",
    }
  end

  it "should create a new instance with valid attributes" do
    @user.heros.create!(@hero_attr)
  end

end

Мой автотест или охранник показывает следующее сообщение

Failures:

  1) HerosController should create a new instance with valid attributes
     Failure/Error: @user       = Factory(:user)
     NoMethodError:
       undefined method `Factory' for #<RSpec::Core::ExampleGroup::Nested_1:0x000001028a3998>
     # ./spec/controllers/heros_controller_spec.rb:8:in `block (2 levels) in <top (required)>'

Finished in 0.00726 seconds
1 example, 1 failure

Failed examples:

rspec ./spec/controllers/heros_controller_spec.rb:33 # HerosController should create a new instance with valid attributes

Ответы [ 4 ]

1 голос
/ 24 августа 2011

в spec_helper.rb

добавить следующее

require 'factory_girl'
load 'factories.rb'
0 голосов
/ 22 января 2014

Попробуйте это

 @user = FactoryGirl(:user)

или

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

Factory Girl должна быть в тестовой группе, иначе она никогда не будет загружена при запуске ваших спецификаций.В настоящее время он загружен только в вашей группе разработчиков.

0 голосов
/ 23 августа 2011

Попробуйте:

@user.HerosController.create!(@hero_attr) 

вместо:

@user.create!(@hero_attr)
...