Rspec控制器基本测试

时间:2013-12-31 10:49:19

标签: ruby-on-rails ruby rspec

我正在开发一个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访问/发布帖子?

提前致谢,

3 个答案:

答案 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进行了修复。