【发布时间】:2013-03-29 16:47:03
【问题描述】:
在我的 Rails 应用程序中,我有应用程序控制器
respond_to :json
一个继承了Application控制器的控制器在动作中用json响应...
# Some code
if mission_updated.eql? true
render :json => {}
else
render :json => {}
end
但是,每当我参考上述操作运行 rspec 测试时
it "should return appropriate response" do
post :update_unlocked_missions
parsed_body = JSON.parse(response.body)
parsed_body.should == {}
end
我返回了以下 rspec 错误
ActionView::MissingTemplate:
Missing template api/v1/missions/update_unlocked_missions, api/v1/base/update_unlocked_missions with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee, :rabl, :haml]}. Searched in:
* "#<RSpec::Rails::ViewRendering::EmptyTemplatePathSetDecorator:0x007f9ea2903b00>"
我的问题是为什么它应该用 json 响应时会进入视图,我该如何解决这个问题?
【问题讨论】:
-
如果你有一个控制器动作,它的主体只是
render :json => {},那会返回你所期望的吗? -
还有一个想法:尝试使用
render json: {}, layout: false...尽管您似乎不必明确告诉它不要使用布局。 -
前一个建议有效。我返回了一个空的 json。我想现在我必须弄清楚为什么我的操作中的代码会产生一个视图。
-
似乎它必须是
mission_updated中的内容。我敢打赌,如果您将控制器的if更改为if true或if false,它会起作用。 -
啊,虽然不是您帮助我解决问题的确切方法。我在一个循环中有 response_to,长话短说,循环阻止了 respond_to 被调用。如果需要,请更新您的答案。
标签: ruby-on-rails json ruby-on-rails-3 rspec controller