我正在使用工厂女孩提供的黄瓜步骤定义,我无法在这里工作。
首先,这是涉及的工厂:
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
我正在使用spork btw。
亲切的问候,
尼尔斯
答案 0 :(得分:0)
这很可能是因为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
希望有帮助,兰斯。
答案 1 :(得分:0)
哦,该死的。得到它了。我在过去的某处将cache_classes
设置为false
,因为正确的类重新加载由于某种原因不起作用。刚刚再次成为true
,现在它可以工作了。 :/