2013-11-21 97 views
3

我想添加FactoryGirl支持我的控制器中的默認腳手架規格,我似乎無法找到正確的語法。RSpec + FactoryGirl和控制器規格

下面是一個例子測試:

describe "POST create" do 
    describe "with valid params" do 
    it "creates a new Course" do 
     expect { 
      post :create, {:course => valid_attributes}, valid_session 
     }.to change(Course, :count).by(1) 
     end 
do 

這一點我通過更換:

describe "POST create" do 
    describe "with valid params" do 
     it "creates a new Course" do 
     expect { 
      post :create, course: FactoryGirl.build(:course) 
     }.to change(Course, :count).by(1) 
     end 
do 

規格/工廠/ courses.rb

FactoryGirl.define do 
    factory :course do 
    association :provider 
    name "Course name" 
    description "course description" 
    end 
end 

應用程序/模型/ course.rb

class Course < ActiveRecord::Base 
    validates :name, :presence => true 
    validates :description, :presence => true 
    validates :provider_id, :presence => true 
    has_many :terms 
    belongs_to :provider 
end 

應用程序/控制器/ courses_controller.rb

# POST /courses 
    # POST /courses.json 

    def create 
    @course = Course.new(course_params) 

    respond_to do |format| 
     if @course.save 
     format.html { redirect_to @course, notice: 'Course was successfully created.' } 
     format.json { render action: 'show', status: :created, location: @course } 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @course.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

它通常失敗 「的ActionController :: ParameterMissing:PARAM未發現:當然」 沒有任何人有什麼想法?

謝謝! 弗朗西斯

回答

11

嘗試:

describe "POST create" do 
     describe "with valid params" do 
      it "creates a new Course" do 
      expect { 
       post :create, course: FactoryGirl.attributes_for(:course, provider_id: 1) 
      }.to change(Course, :count).by(1) 
      end 
     end 
    end 

工廠女孩使用attributes_for選項生成值的散列,而不是一個Ruby對象。

+0

我以前試過這個,但是spec失敗了:「count應該已經被改變了1,但被改變了0」 –

+0

你可以在'courses_controller'上發佈你的':course'工廠,'create'行爲和'Course '模特?您的測試現在失敗了,而不是出現錯誤。 – AbM

+0

根據要求使用工廠數據更新我的原始帖子。 –

相關問題