如何模拟不存在的ActiveRecord模型来测试Rails可安装引擎

时间:2013-09-15 21:28:26

标签: ruby-on-rails ruby-on-rails-4 rspec-rails

我花了很长时间试图找到一个如何模拟相关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 direcory中的blorg.rb

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

1 个答案:

答案 0 :(得分:0)

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

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