【发布时间】:2015-06-27 21:42:36
【问题描述】:
我正在使用 RSpec 测试我的 rails 应用程序,并且正在测试控制器。具体来说,我正在尝试渲染我的 jobs.json.jbuilder 视图文件。
我的控制器
class CustomersController < ApplicationController
before_action :authenticate_member!
before_action :set_customer
def jobs
@jobs = @customer.jobs
end
我对应的视图位于:
views/customers/jobs.json.jbuilder
我的 RSpec 测试是:
describe "GET job" do
it "renders the jobs view" do
get 'jobs', {id: @customer.id}, {format: :json}
expect(response).to render_template("customers/jobs.json.jbuilder")
end
end
但我不断收到的错误是:
Failure/Error: get :jobs, {id: @customer.id}, {format: :json}
ActionView::MissingTemplate:
Missing template customers/jobs, application/jobs with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :slim]}. Searched in:
* "#<RSpec::Rails::ViewRendering::EmptyTemplatePathSetDecorator:0x007fa219178f78>"
# ./spec/support/engine_controller.rb:25:in `process_action'
# ./spec/support/engine_controller.rb:3:in `get'
# ./spec/controllers/customers_controller_spec.rb:31:in `block (3 levels) in <top (required)>'
注意:如果我创建了一个jobs.html.erb 文件.. 那么这个错误就会消失,(它会呈现jobs.html.erb 文件) - 所以我的问题是如何呈现.json.jbuilder 视图?
这是我的spec/support/engine_controller 文件:
module EngineController
def get(action, parameters = nil, session = nil, flash = nil)
process_action(action, parameters, session, flash, "GET")
end
private
def process_action(action, parameters = nil, session = nil, flash = nil, method = "GET")
parameters ||= {}
process(action, method, parameters.merge!(:use_route => :my_engine_name), session, flash, )
end
【问题讨论】:
标签: ruby-on-rails json rspec controller jbuilder