问题描述
我正在使用以下版本的 Ruby、RSpec 和 Rails
ruby (2.3.2)
rails (~> 5.0,>= 5.0.0.1)
rspec-core (3.5.4)
rspec-expectations (3.5.0)
rspec-mocks (3.5.0)
rspec-rails (3.5.2)
MyClass
class << self
def update_obj(model_obj_id:,updatable_attrs:)
model_obj = MyUpdateService.update_obj(model_obj_id,updatable_attrs)
if model_obj.errors.present?
# Log errors.
return
end
model_obj
end
end
end
在我的业务工作流中,上述方法被多次调用
具有不同的 model_obj_id
。现在在测试中,我正在为工作流程编写代码
我有一个需要,我需要设置一个期望,其中我不希望使用特定的 MyClass.update_obj
调用 model_obj_id
,如下所示:
my_model_obj = find_model_obj
expect(MyClass).to_not(
receive(:update_obj)
.with(model_obj_id: my_active_record_model_obj.id,updatable_attrs: instance_of(Hash))
)
subject.process_update
但是,当我以这种期望运行示例时,我遇到了以下错误:
Failure/Error: if model_obj.errors.present?
NoMethodError:
undefined method `errors' for nil:NilClass
查看错误,我认为由于我没有在模拟中设置返回值,因此对于预期为 model_obj_id
的调用会返回错误。例如。对于 ID 为 10 的 obj 我希望调用 MyClass.update_obj
但对于 ID 为 15 的 obj 不应该。错误似乎是由使用 MyClass.update_obj
调用的 model_obj_id: 10
引发的。
所以基本上我希望期望仅适用于特定的 model_obj_id
,而对于其他人,它应该调用原始实现。
有人可以帮我设置期望的期望值吗?
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)