我有一个ActiveRecord对象用户。在我正在制作的应用程序中,我在gem上使用单个符号,但我需要在数据库中保存一些用户数据。我的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)
返回错误消息“用户未实现创建”。
答案 0 :(得分:2)
我认为allow_any_instance_of
希望User
的实例能够实现create
。但是,create
是类方法。因此,我认为错误消息是User
的实例没有实现create
。
我建议查看class_double
是否适用于您的用例。查看来自Myron Marston的Rspec Mocks和this SO帖子。
答案 1 :(得分:2)
jvillian是正确的,问题是create
由User
实现,而不是User
的实例。简单的修复只是直接在User
上存根(即使用allow
而不是allow_any_instance_of
):
allow(User).to receive(:create).with(any_args).and_return(user)
此外,.with(any_args)
是无操作,因此这是等效的:
allow(User).to receive(:create).and_return(user)