【发布时间】:2018-12-06 09:19:49
【问题描述】:
我即将为我的自定义验证器编写规范,它使用此链检查 ActiveStorage 附加的文件是否为 txt:
return if blob.filename.extension.match?('txt')
通常,我可以通过这个调用来存根它:
allow(attached_file).to receive_message_chain(:blob, :byte_size) { file_size }
Rubocop 说这是一种冒犯,并指出我的文档:https://www.rubydoc.info/gems/rubocop-rspec/1.7.0/RuboCop/Cop/RSpec/MessageChain
我必须为 blob 和 byte_size 声明 double 并将它们存根在不同的行中,最终得到 5 行代码而不是 1 行。我在这里遗漏了什么吗?
【问题讨论】:
-
“链可以任意长,这使得以暴力方式违反得墨忒耳法则很容易,所以你应该考虑任何使用 receive_message_chain 的代码气味。[....] @987654328 @ 导致脆弱的例子”。取自relishapp.com/rspec/rspec-mocks/docs/working-with-legacy-code/…
-
谢谢,我已经阅读了这两个来源,但是对于“更快”的扩展,我真的无能为力——我可以创建自己的方法并将
blob传递给它,即会卧底打电话.filename.extension,但你觉得真的值得吗?
标签: ruby-on-rails rspec rubocop rubocop-rspec