Ruby on rails 带merge的Rspec强参数

Ruby on rails 带merge的Rspec强参数,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,所以我正试图为我正在进行的项目编写一些测试。 控制器 def update @project = Project.find_by(id: params[:id]) current_tags = @project.project_tags current_tags.destroy_all @project.assign_attributes(project_params) tags = params[:tags].split(',') if @p

所以我正试图为我正在进行的项目编写一些测试。 控制器

  def update
    @project = Project.find_by(id: params[:id])
    current_tags = @project.project_tags
    current_tags.destroy_all
    @project.assign_attributes(project_params)
    tags = params[:tags].split(',')
    if @project.save
      tags.each do |tag|
        valid_tag = Tag.find_by(name: tag.strip.capitalize)
        if valid_tag
          @project.tags << valid_tag
        else
          flash[:notice] = "That tag does not exist"
        end
      end
      redirect_to @project, notice: "Project updated successfully"
    else
      flash.now[:errors] = @project.errors.full_messages
      render :edit
    end
  end
我的项目工厂和工厂女孩

FactoryGirl.define do
  factory :project do
    creator_id 1
    title {Faker::Hacker.adjective}
    description {Faker::Hacker.say_something_smart}
    start_date {Faker::Date.between(2.days.ago, Date.today)}
    end_date {Faker::Date.forward(20)}
    status 'planning'
    skills_desired 'be smart'

    factory :invalid_project do
      title nil
    end

  end
end
最后是我得到的错误

  1) ProjectsController PATCH #update while not logged in redirects user back to the root path
     Failure/Error: let(:project) {FactoryGirl.create(:project)}
     ActiveRecord::RecordInvalid:
       Validation failed: Creator can't be blank

因此,我假设问题是,在我的强参数中的控制器中,我正在将创建者id合并到项目中。我不确定要进行测试,正确的语法应该是什么。我在网上搜索了一段时间,什么也找不到。我想在这件事上帮点忙。谢谢

我相信当前的错误会让您满意

 ActiveRecord::RecordInvalid:
    Validation failed: Creator can't be blank
是因为你有这条线

validates :creator, presence: true
因此,如果未分配有效的创建者记录id,则无法创建项目工厂,并且创建者记录必须首先存在。我建议你为创造者工厂做类似的事情。通过这种方式,您可以确保存在一个具有有效id的创建者记录,以便在项目记录的Creator\u id属性中使用

FactoryGirl.define do
    factory :creator do
      some_attribute "some attribute"
      after(:create) do |creator, evaluator|
        creator.projects << FactoryGirl.create(:project, creator_id: creator.id)
      end
    end
  end
FactoryGirl.define do
工厂:创造者做什么
某些属性“某些属性”
之后(:create)do |创建者、评估者|

creator.projects因此,经过一些实验和朋友的一点帮助,我能够通过在项目工厂中执行以下操作来添加协作者id:

FactoryGirl.define do
  factory :project do
    association :creator, factory: :user
    title {Faker::Hacker.adjective}
    description {Faker::Hacker.say_something_smart}
    start_date {Faker::Date.between(2.days.ago, Date.today)}
    end_date {Faker::Date.forward(20)}
    status 'planning'
    skills_desired 'be smart'

    factory :invalid_project do
      title nil
    end

  end
end
我添加的字段是关联

association :creator, factory: :user

这允许我使用我在工厂模型中建立的关联。谢谢你抽出时间来帮我@米列斯瓦:你的解决方案也很有效,但我设法想出的那个方案帮助我把它保留到了一家工厂。再次感谢

您应该在
项目参数
上添加项目
id
,您不需要合并任何内容,因为
项目
已经属于
创建者
FactoryGirl.define do
  factory :project do
    association :creator, factory: :user
    title {Faker::Hacker.adjective}
    description {Faker::Hacker.say_something_smart}
    start_date {Faker::Date.between(2.days.ago, Date.today)}
    end_date {Faker::Date.forward(20)}
    status 'planning'
    skills_desired 'be smart'

    factory :invalid_project do
      title nil
    end

  end
end
association :creator, factory: :user