用rspec测试ruby中的"create"方法

sha*_*han 1 rspec ruby-on-rails

我在Ruby on Rails中编写了这个控制器代码

class PostsController < ApplicationController
  before_filter :authenticate_user!

  def index  
    @posts = Post.all(:order => "created_at DESC")  
    respond_to do |format|  
      format.html  
    end  
  end  

  def create  
    @post = Post.create(:message => params[:message])  
    respond_to do |format|  
      if @post.save  
        format.html { redirect_to posts_path }  
        format.js
      else  
        flash[:notice] = "Message failed to save."  
        format.html { redirect_to posts_path }  
      end  
    end  
  end  
end
Run Code Online (Sandbox Code Playgroud)

并对应于此我写了以下测试用例: -

require 'spec_helper'

describe PostsController do
  describe "GET 'index'" do
    it "returns http success" do
      get 'index'
      response.should be_success
    end
  end

  describe "#create" do
    it "creates a successful mesaage post" do
      @post = Post.create(message: "Message")
      @post.should be_an_instance_of Post
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我两个都失败了.请查看代码并帮我弄清楚.

Tig*_*ine 5

我怀疑你使用Devise后没有登录?

也许你需要包括设计测试人员:

describe PostsController do
  include Devise::TestHelpers
  before(:each) do
    @user = User.create(...)
    sign_in @user
  end

  #assertions go here
end
Run Code Online (Sandbox Code Playgroud)