Ruby on rails 如何在RSpec中模拟对新ActiveRecord对象的创建调用?

Ruby on rails 如何在RSpec中模拟对新ActiveRecord对象的创建调用?,ruby-on-rails,ruby,unit-testing,activerecord,rspec,Ruby On Rails,Ruby,Unit Testing,Activerecord,Rspec,我有一个ActiveRecord对象用户。在我制作的应用程序中,我使用的是单一登录gem,但我需要将一些用户数据保存在我们的数据库中。My ApplicationController具有以下代码: def create_user User.create(name: current_user['name'], email: current_user['email'], company_id: current_user['id']) end 我需要一个RSpec测试来模拟实际的create调用

我有一个ActiveRecord对象用户。在我制作的应用程序中,我使用的是单一登录gem,但我需要将一些用户数据保存在我们的数据库中。My ApplicationController具有以下代码:

def create_user
  User.create(name: current_user['name'], email: current_user['email'], company_id: current_user['id'])
end
我需要一个RSpec测试来模拟实际的
create
调用。我试过了

allow_any_instance_of(User).to receive(:create).with(any_args).and_return(user)

它返回一个错误,表示“用户未实现创建”。

我认为
允许的任何实例都希望
用户的实例实现
创建
<但是,代码>创建
是一种类方法。因此,我相信错误消息是说
User
的实例没有实现
create


我建议看看
class\u double
是否适用于您的用例。请查看Myron Marston的帖子。

jvillian是正确的,问题在于
create
是由
User
实现的,而不是由
User
的实例实现的。简单的解决方法是将方法直接存根在
用户上(即使用
允许
而不是
允许任何
实例):

另外,
.with(any_args)
是一个no op,因此这相当于:

allow(User).to receive(:create).and_return(user)
allow(User).to receive(:create).and_return(user)