0

我花了很长时间试图找出如何模拟关联的 ActiveRecord 模型的解决方案,但几乎一无所获。

我正在关注http://guides.rubyonrails.org/engines.html#testing-an-engine来构建一个简单的可安装引擎。我很好奇你如何在这种情况下进行测试,如何模拟仅在未来应用程序中存在的关联 ActiveRecord 模型?

例如,如何编写测试用例可以使“post = Post.create!valid_attribute”通过?

在 post.rb 中:

attr_accessor :author_name
belongs_to :author, class_name: Blorgh.author_class

before_save :set_author

private
  def set_author
    self.author = Blorgh.author_class.find_or_create_by(name: author_name)
  end

在测试用例中:

  it "assigns all posts as @posts" do
    //how to do here?
    post = Post.create! valid_attributes

    get :index, {use_route: :blorgh}, valid_session
    assigns(:posts).should eq([post])
  end

错误:

  Failure/Error: post = Post.create! valid_attributes
  NoMethodError:
  undefined method `find_or_create_by' for nil:NilClass

blorg\lib 目录中的 blorg.rb

  module Blorgh4mRspect
    mattr_accessor :author_class    
    def self.author_class
      @@author_class.constantize
    end
  end
4

1 回答 1

0

您不想继续引用Blorgh.author_class抽象而不是对User类的硬编码引用吗?

def set_author
  self.author = Blorgh.author_class.constantize.find_or_create_by(name: author_name)
end
于 2013-09-16T01:57:16.707 回答