如何解决RSpec 期望类 to_not 接收带有特定参数的方法
我正在使用以下版本的 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 举报,一经查实,本站将立刻删除。