Ruby on rails 如何使用mocha存根发送_文件

Ruby on rails 如何使用mocha存根发送_文件,ruby-on-rails,mocking,stubbing,ruby-mocha,Ruby On Rails,Mocking,Stubbing,Ruby Mocha,最直接的尝试是 @controller.stubs(:send_file) 但这会导致输出错误,如 ActionView::MissingTemplate: Missing template ... 那么,我该如何剔除这些错误呢 这个问题基本上与上一次被问到的问题相同,但从未得到真正的回答 Jarl缺少模板错误可能指向这样一个事实,即send_file现在没有做任何事情(因为存根),因此Rails将尝试沿着渲染链向下并尝试显示模板 您现在已经有效地禁用了send_file调用,因此您需要将存

最直接的尝试是

@controller.stubs(:send_file)
但这会导致输出错误,如

ActionView::MissingTemplate: Missing template ...
那么,我该如何剔除这些错误呢

这个问题基本上与上一次被问到的问题相同,但从未得到真正的回答


Jarl

缺少模板错误可能指向这样一个事实,即send_file现在没有做任何事情(因为存根),因此Rails将尝试沿着渲染链向下并尝试显示模板


您现在已经有效地禁用了send_file调用,因此您需要将存根更改为Rails能够解释并认为请求已得到处理的实际发送内容,因为文件已被提供,在这种情况下,不再需要呈现任何模板。

我也不得不对此进行抗争。据我所知,对我来说最好的解决方案是:

(控制员)

(测试)

我不喜欢修改代码以允许您进行测试,但我不太喜欢花很多时间为一个相当琐碎的问题找到正确的解决方案:)

使用Rails 4(或者更早的版本)[1],它会处理这个问题,并检查“已执行?”

因此,如果您想将其删除,删除“performed?”就足够了:

subject.stubs(:performed?).returns(true)
subject.expects(:send_file).
  with(image, disposition: "inline")
执行<代码>也没有那么难:

performed?
  response_body || (response && response.committed?)
end
因此,在您不希望或无法执行存根
的情况下,只需确保
响应\u body
不是零



[1] 使用5+时,它已被移动到BasicImplicitRender中。

为什么要使用存根发送文件方法?取而代之的是,你能把文件生成逻辑存根吗?我不知道你的意思,阿伦。我已经更新了我的问题,以便更具体地说明我的意思。您能告诉我们为什么要存根send_file方法吗?我想存根send_file,因为我正在编写一个只关心控制器其他行为的测试,因此,测试应该完全忽略send_file调用。我宁愿不存根send_file方法,因为它相当于存根render调用。你能把密码寄给我们吗。万一你还想存根呢?是的,我明白,但是你怎么欺骗管制员呢?另见
subject.stubs(:performed?).returns(true)
subject.expects(:send_file).
  with(image, disposition: "inline")
performed?
  response_body || (response && response.committed?)
end