我花了很长时间试图找出如何模拟关联的 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