Неинициализированная константа из factory_girls при тестировании - PullRequest
1 голос
/ 12 февраля 2012

Я использую Rails 3.2.1 с factory_girl_rails, и у меня проблема, вот мой файл factories.rb:

require factory_girl
  ##defining room requests
  Factory.define :room_request do |rr|
    rr.starts_at '2012-02-06 08:00:00 UTC'
    rr.ends_at '2012-02-06 17:00:00 UTC'
    rr.request_type 'normal request'
    rr.number_of_participants 5
    rr.bookers_name 'Tester'
    rr.number_of_microphone 3
    rr.status 'waiting'
    rr.room_id 1
  end

  Factory.define :wrong_room_request do |wrr|
    wrr.starts_at ''
    wrr.ends_at ''
    wrr.request_type ''
    wrr.number_of_participants 0
    wrr.bookers_name 'r'
    wrr.number_of_microphone 0
    wrr.status ''
    wrr.room_id ''
  end

И мой файл room_request_spec.rb:

require 'spec_helper'

describe RoomRequest do

  it "accepts if room is selected" do
    room_request = Factory(:room_request)
    room_request.room_id.should_not be_nil
    room_request.should be_valid
  end

  it "rejects when room is not selected" do
    wrong_room_request = Factory(WrongRoomRequest)
    wrong_room_request.room_id.should be_nil
    wrong_room_request.should_not be_valid
  end

end

Когда я запускаю тест по rspec spec/models/room_request_spec.rb У меня есть:

Failures:

  1) RoomRequest rejects when room is not selected
     Failure/Error: wrong_room_request = Factory(WrongRoomRequest)
     NameError:
       uninitialized constant WrongRoomRequest
     # ./spec/models/room_request_spec.rb:12:in `block (2 levels) in <top (required)>'

Я не знаю, как его инициализировать, пожалуйста, помогите: /

1 Ответ

4 голосов
/ 15 февраля 2012

Вам нужно вызывать Фабрику с символом, а не с константой.

wrong_room_request = Factory(:wrong_room_request)

Обновите файл factories.rb до нового синтаксиса следующим образом:

FactoryGirl.define do
  factory :room_request do
    starts_at '2012-02-06 08:00:00 UTC'
    ends_at '2012-02-06 17:00:00 UTC'
    request_type 'normal request'
    number_of_participants 5
    bookers_name 'Tester'
    number_of_microphone 3
    status 'waiting'
    room_id 1
  end

  factory :wrong_room_request do
    starts_at ''
    ends_at ''
    request_type ''
    number_of_participants 0
    bookers_name 'r'
    number_of_microphone 0
    status ''
    room_id ''
  end
end

Наконец, я предполагаю, что вы используете гем factory_girl_rails. Поэтому, чтобы убедиться, что он настроен правильно, ваш gemfile должен включать:

group :test do
  gem 'factory_girl_rails', :require => false
end

А ваш spec_helper.rb должен включать

require 'factory_girl_rails' 
...