30

如何测试发送文件的控制器操作?

如果我controller.should_receive(:send_file)使用“缺少模板”进行测试失败,因为没有渲染任何内容。

4

4 回答 4

34

谷歌搜索 ,似乎也会在某些时候被调用..但是没有模板,会导致错误render

解决方案似乎也将其存根:

controller.stub!(:render)
于 2011-01-15T19:58:01.487 回答
26

另一种有效的方法是:

controller.should_receive(:send_file).and_return{controller.render :nothing => true}

对我来说,这抓住了这样一个事实,即预期的副作用send_file是安排不渲染任何其他内容。(尽管,让存根调用原始对象上的方法似乎有点不靠谱。)

于 2011-12-07T10:18:34.220 回答
9

你也可以这样做:

result = get ....

result.body.should eq IO.binread(path_to_file)
于 2013-07-05T22:34:50.383 回答
0

这在 RSpec 控制器测试中对我很有用。我更喜欢不将其存根,而是调用原始文件,以便它确实返回文件,您甚至可以访问响应标头等...

expect(controller).to receive(:send_file).with(some_filepath, type: "image/jpg").and_call_original
于 2020-02-06T21:47:44.057 回答