ruby-on-rails - RSpec + FactoryGirl 和 Controller 规范

标签 ruby-on-rails rspec factory-bot

我正在尝试在我的 Controller 中添加 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

应用程序/ Controller /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 not found: course”有人知道吗?

谢谢!
弗朗西斯

最佳答案

尝试:

    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

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

关于ruby-on-rails - RSpec + FactoryGirl 和 Controller 规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20126078/

相关文章:

jquery - Joyride Javascript 教程在页面加载时不起作用

ruby-on-rails - RSPEC 的资源和引用资料

ruby - 如何在 Rspec 中模拟方法调用

ruby-on-rails - 如何在运行每个规范文件之前清理数据库?

ruby-on-rails - capybara 不会等待 factory_girl 完成

javascript - 改变形式的多个部分

ruby-on-rails - 按对象属性对数组进行排序但使用 nil? Ruby 中的条件

ruby-on-rails - 更改模型的主键属性时,Rails FactoryGirl 重复键值违反唯一约束

ruby-on-rails - Rails - FactoryGirl - 测试模型 [验证]

ruby-on-rails - `count` 和 `size` 之间令人困惑的区别