Сбой теста RegistrationsController с моделью User, имеющей одну связанную модель Address - PullRequest
1 голос
/ 13 января 2012

Я пытаюсь протестировать метод создания переопределенного контроллера Devise, чтобы убедиться, что при отправке моей регистрационной формы мой пользователь создается в базе данных со связанным адресом.На самом деле использование формы для отправки данных работает нормально.

Теперь при запуске теста я получаю:

Failure/Error: post :create, :user => {
     NameError:
       uninitialized constant User::Address

Вот код для различных акторов:

Пользовательмодель

class User < ActiveRecord::Base     

  has_many :products, :as => :owner, :dependent => :destroy
  has_one :address, :as => :addressable, :dependent => :destroy
  has_and_belongs_to_many :shops

  accepts_nested_attributes_for :address

  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable,
     :token_authenticatable, :confirmable, :lockable, :timeoutable, :omniauthable


  attr_accessible :first_name, :last_name, :email, :password, :password_confirmation,       :remember_me, :address_attributes

end

Затем модель адреса

class Address < ActiveRecord::Base

  belongs_to :addressable, :polymorphic => true

  attr_accessible :address

end

Контроллер регистрации:

class RegistrationsController < Devise::RegistrationsController

  def new
    resource = build_resource({})
    resource.build_address
    respond_with resource
  end
end

Я переопределяю новый метод для создания связанного адреса

И, наконец, тест:

require 'spec_helper'

describe RegistrationsController do

  render_views

  describe "the registration process" do

    before do
      @request.env["devise.mapping"] = Devise.mappings[:user]
    end

    it "creates a new user" do
      lambda do
        post :create, :user => {
            :email => 'user@test.com',
            :password => 'somepassword',
            :password_confirmation => 'somepassword',
            :address_attributes => {
              :address => 'an address'
            }
        }
      end.should change(User, :count).by(1)
    end

  end


end

То же самое происходит, если я пишу тест с использованием Capybara, заполняющим форму вместо размещения хеша.

Похоже, он не распознаетОтношения ActiveRecord в тестовой среде.Я довольно новичок в мире рельсового тестирования, так что это может быть что-то довольно простое, но я уже потратил много времени, пытаясь выяснить, что происходит.

Спасибо за помощь

...