如何测试发送文件的控制器操作?
如果我使用controller.should_receive(:send_file)
测试失败并且“缺少模板”失败,因为没有任何内容被渲染。
答案 0 :(得分:34)
答案 1 :(得分:25)
另一种有效的方法是:
controller.should_receive(:send_file).and_return{controller.render :nothing => true}
对我来说,这抓住了这样一个事实,即send_file
的预期副作用是安排不再呈现任何其他内容。 (尽管如此,使用存根调用原始对象上的方法似乎有点不可思议。)
答案 2 :(得分:7)
你也可以这样做:
result = get ....
result.body.should eq IO.binread(path_to_file)
答案 3 :(得分:0)
这对RSpec控制器测试非常有用。我更喜欢不存根,而是调用原始文件,这样它确实会返回文件,您甚至可以访问响应头等。
expect(controller).to receive(:send_file).with(some_filepath, type: "image/jpg").and_call_original