如何测试Rails中的send_data方法?

如何在Rails中测试send_data方法?

当我读到他的问题时,我认为这意味着,他如何确保send_data发送字符串/他要求的任何内容。 不是为了测试它的发送,而是为了确保他的安心,他发送的方法并非空白。 嘲笑,正如你所做的那样,并没有真正得到他那样的结果。

也许你可以确保你的字符串不是空白,或类似的东西。 这样你就不会测试send_data,但是send_data得到的是你想要它的样子。

在我的情况下(是什么让我想到这个问题)将是

 #just use this to make sure it looks like you want it to while you are writing your #tests. I remove it after. make sure it's an instance variable @csv_string in my case. puts assigns(:csv_string) refute_nil assigns(:csv_string) #does the actual work. delete the puts line when done. 

一些更高级的人使用ruby调试器,不要……你的里程会有所不同。

首先看一下send_data方法的来源http://api.rubyonrails.org/classes/ActionController/DataStreaming.html#method-i-send_data

根据这一点, send_data只是将所有内容都render :text => '...'以及其他选项。

我想你可以这样做:

 response.body.should eql data response.header['Content-Type'].should eql 'image/png' 

您不应该测试send_data本身的行为,主要是因为Rails自己的测试已经涵盖了这一点。 此外,它将使您的测试运行缓慢(最终)。 你应该做什么(从我的角度来看)是存根send_data方法,如:

controller.expects(:send_data).with("foo").returns(:success)

希望能帮助到你。

您可以通过检查Content-Transfer-Encoding标头的值来间接测试它。

 expect(controller.headers [“Content-Transfer-Encoding”])。到eq(“binary”)

要么

 controller.headers [“Content-Transfer-Encoding”]。应该是eq(“二进制”)