Проблема с определениями шага заводской девушки огурца - PullRequest
0 голосов
/ 02 сентября 2011

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

Прежде всего, здесь задействованы фабрики:

Factory.define :user do |u|
  u.name {|n| "User#{n}" }
  u.first_name {|n| "FirstName#{n}"}
  u.last_name {|n| "LastName#{n}"}
  u.password 'please'
  u.password_confirmation 'please'
end

Factory.define :lecture do |l|
  l.name {|n| "Lecture#{n}"}
  l.abbreviation {|n| "lec#{n}"}
  l.association :admin, factory: :user
end

Здесьэто шаг, который я пытаюсь выполнить:

And the following Lecture exists:                                        
      | Name                                           | Abbreviation |
      | Informatik A - Algorithmen und Datenstrukturen | ainf         |

Я получаю это сообщение об ошибке и совершенно не знаю, откуда оно исходит:

User(#42819220) expected, got User(#43753000) (ActiveRecord::AssociationTypeMismatch)
      features/lectures/ui.feature:11:in `And the following Lecture exists:'

И вот мои определения модели:

    class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :rememberable, :trackable

      # Setup accessible (or protected) attributes for your model
  attr_accessible :name, :password, :password_confirmation, :remember_me, :first_name, :last_name

  validates_uniqueness_of :name

  has_many :administrated_lectures, class_name: "Lecture", foreign_key: "admin_id", dependent: :nullify
end

class Lecture < ActiveRecord::Base
  validates_uniqueness_of :name
  validates_uniqueness_of :abbreviation

  scope :ordered, order("name")

  belongs_to :admin, class_name: "User"
end

Я использую это со спорком, кстати.

С уважением,

Нильс

Ответы [ 2 ]

0 голосов
/ 18 сентября 2011

О, черт. Понял. Я установил cache_classes на false где-то в прошлом, потому что правильная перезагрузка класса по какой-то причине не работала. Просто сделал это true снова, и теперь это работает. : /

0 голосов
/ 16 сентября 2011

Это скорее всего из-за Spork.

Ошибка в том, что в какой-то момент константа User перезагружается, но FactoryGirl все еще ссылается на старую константу. Это потому, что вы можете выгружать константы следующим образом:

Object.remove_const :User

Показать строку в этом классе:

Вы можете увидеть, где происходит эта ошибка, указав точку останова или просто осмотрев где-то в этих двух местах:

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

Spork.each_run do
  # this isn't the correct api, something like this though.
  FactoryGirl.definition_file_paths = [File.join(Rails.root, 'spec', 'factories')]
  FactoryGirl.find_definitions
end

Надеюсь, это поможет, Лэнс.

...