工厂女孩黄瓜步骤定义的问题

时间:2011-09-02 18:05:56

标签: ruby-on-rails-3 cucumber factory-bot

我正在使用工厂女孩提供的黄瓜步骤定义,我无法在这里工作。

首先,这是涉及的工厂:

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。

亲切的问候,

尼尔斯

2 个答案:

答案 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,现在它可以工作了。 :/