) ты должен бежать

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

Я использую Rails 3, rspec и Factory Girl:

gem 'rails', '3.0.3'
# ...   
gem 'rspec-rails', '~>2.4.0'
gem 'factory_girl_rails'

У меня есть пользовательская модель, на которой я успешно выполнял тесты во время разработки, но затем мне нужно было добавить атрибут, называемый «источник». Он предназначен для определения того, откуда исходная запись пользователя (локальная или LDAP).

В моем файле factories.rb я определил несколько фабрик, которые выглядят примерно так:

# An alumnus account tied to LDAP
Factory.define :alumnus, :class => User do |f|
  f.first_name "Mickey"
  f.last_name  "Mouse"
  f.username   "mickeymouse"
  f.password   "strongpassword"
  f.source     "directory"
end

Я определил макрос (который работал до сих пор), который выглядит следующим образом:

def login(user)
  before(:each) do
    sign_out :user
    sign_in Factory.create(user)
  end
end

Я называю это в нескольких спецификациях, например, так (пример из users_controller_spec.rb):

describe "for non-admins or managers" do
  login(:alumnus)

  it "should deny access" do
    get :index
    response.should redirect_to(destroy_user_session_path)
  end

end

Если я не указываю атрибут «source», все работает нормально, но, как только я это сделаю, я получаю сообщение об ошибке, как при запуске теста

  12) UsersController for non-admins or managers should deny access
 Failure/Error: Unable to find matching line from backtrace
 NoMethodError:
   undefined method `source=' for #<User:0x00000100e256c0>

Я могу получить доступ к атрибуту без проблем из консоли rails и самого приложения, и он указан в моем attr_accessible в пользовательской модели. Как будто Rspec видит старую версию моей модели и не распознает, что я добавил к ней атрибут. Но если я добавлю следующую строку в мою модель пользователя, ошибка исчезнет

attr_accessor :source

... что указывает на то, что он на самом деле смотрит на правильную модель.

Помогите!

Ответы на вопрос(1)

Ваш ответ на вопрос