我花了很长时间试图找到一个如何模拟相关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
答案 0 :(得分:0)
您不想继续引用Blorgh.author_class
抽象而不是User
类的硬编码引用吗?
def set_author
self.author = Blorgh.author_class.constantize.find_or_create_by(name: author_name)
end