RSpec send_file测试

时间:2011-01-15 17:43:55

标签: ruby-on-rails rspec sendfile

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

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

4 个答案:

答案 0 :(得分:34)

Googling around开始,似乎render也会在某个时候被调用..但没有模板会导致错误。

解决方案似乎也是为了解决问题:

controller.stub!(:render)

答案 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