我正在开发一个ruby on rails项目(rails 3.2.12和ruby 1.9.3),我正在尝试测试我的一个控制器。所以,我有这个控制器:
class PostsController < ApplicationController
def index
@posts = Post.all
end
end
和我的测试:
require "spec_helper"
describe PostsController do
let(:post){FactoryGirl.create(:post)}
context "JSON" do
describe "GET #index" do
it "should access index" do
get :index
end
end
end
end
和我的routes.rb
AuthApp::Application.routes.draw do
resources :posts
end
但是在运行之后
$ rspec spec
我收到了这个错误:
1) PostsController JSON GET #index should access index
Failure/Error: get :index
ActionView::MissingTemplate:
Missing template posts/index, application/index with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :jbuilder]}. Searched in:
* "#<RSpec::Rails::ViewRendering::EmptyTemplatePathSetDecorator:0x007fbfb62d64a0>"
# ./spec/controllers/post_controller_spec.rb:9:in `block (4 levels) in <top (required)>'
如何使用索引操作而不是/ posts / index访问/发布帖子?
提前致谢,
答案 0 :(得分:3)
默认情况下,rspec配置为不呈现视图(see here) 它可以在spec / support / spec_helper.rb(或spec / support / rails_helper.rb)中进行更改,如下所示:
RSpec.configure do |config|
config.render_views = true
end
或者可以在需要的spec文件中添加块:
require 'rails_helper'
RSpec.configure do |config|
config.render_views = true
end
describe SessionsController, :type => :controller do
...
答案 1 :(得分:1)
将格式指定为json
it "........" do
expected = {...}.to_json
get :index, :format => :json
response.body.should == expected
end
答案 2 :(得分:1)
感谢您的所有答案。我遇到的问题是我的模板是一个jbuilder模板,默认情况下规范不会渲染它们。
我在github中使用此link进行了修复。