如果控制器只使用javascript响应,那么如何在Rspec中测试控制器?例如,这将是我的实际代码:
一些view.html.erb
link_to 'More Chips', add_chips_path, :remote => truechips_controller
def add_chips
Chips.create(:color => :red)
@chips = Chips.all
endadd_chips.js.erb
$('#chip_count').html('<%=j render("chips/list", :chips => @chips) %>');Rspec测试
规范/控制器/芯片控制器规范
it "should add chips" do
post :add_chips, :format => 'js'
end当我尝试使用RSpec发布时,我得到了一个缺少模板的错误,因为它正在发送一个超文本标记语言请求,但是没有超文本标记语言视图。我尝试过传入一种格式,但似乎不起作用。我知道我可以放入一个“虚拟的”html视图来让它通过,但这看起来像是一个hack。
谢谢
发布于 2012-09-28 09:57:25
好了,我知道我做错了什么。我在我的测试中传递了一个参数散列,该格式需要包含在相同的散列中。因此,不是这样:
@params = {:chip_color => 'red'}
...
post :add_chips, @params, :format => 'js'它需要看起来像这样
@params = {:chip_color => 'red', :format => 'js'}
...
post :add_chips, @params发布于 2013-03-17 18:32:08
如果您正在尝试执行来自控制器规范的Ajax请求,而不是执行post :add_chips并将format作为参数传递,您应该这样做:
xhr :post, :add_chips, @params参数中的...without format。它将发出一个JavaScript请求,并使用.js模板进行响应。
更新:
在Rails/RSpec的最新版本中,您应该这样做:
post :add_chips, params: @params, xhr: truehttps://stackoverflow.com/questions/12604096
复制相似问题