RSpec + FactoryGirl和控制器规格

Fra*_*let 4 rspec ruby-on-rails factory-bot

我正在尝试添加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
Run Code Online (Sandbox Code Playgroud)

我替换为:

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
Run Code Online (Sandbox Code Playgroud)

规格/工厂/ courses.rb

FactoryGirl.define do
  factory :course do
    association :provider
    name "Course name"
    description "course description"
  end
end
Run Code Online (Sandbox Code Playgroud)

应用程序/模型/ 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
Run Code Online (Sandbox Code Playgroud)

应用程序/控制器/ 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
Run Code Online (Sandbox Code Playgroud)

它通常会失败:"ActionController :: ParameterMissing:param not found:course"有没有人有任何想法?

谢谢!弗朗西斯

AbM*_*AbM 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
Run Code Online (Sandbox Code Playgroud)

Factory Girl使用attributes_for选项生成值的哈希值而不是Ruby对象.