Search code examples
rubyrspecruby-on-rails-5factory-botrspec-rails

rspec post:create action ArgumentError: unknown keyword: post


This is my FactoryBot file as post.rb

FactoryBot.define do
  factory :post do
    title 'Rspec Test'
    text  'test for attributes'
    user_id 1
    topic_id 1
  end
end

In posts_controller_spec.rb I have the following to test case for post create action

it 'creates a new customer' do
  post :create, post: attributes_for(:post)
  expect(Post.count).not_to eq(0)
end

I am getting the following error

$stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /Users/vignesh/assignment/bin/rails spec
/Users/vignesh/.rvm/rubies/ruby-2.4.1/bin/ruby -I/Users/vignesh/.rvm/gems/ruby-2.4.1/gems/rspec-core-3.7.1/lib:/Users/vignesh/.rvm/gems/ruby-2.4.1/gems/rspec-support-3.7.1/lib /Users/vignesh/.rvm/gems/ruby-2.4.1/gems/rspec-core-3.7.1/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb

ArgumentError: unknown keyword: post
/Users/vignesh/.rvm/gems/ruby-2.4.1/gems/rails-controller-testing-1.0.2/lib/rails/controller/testing/template_assertions.rb:61:in `process'
/Users/vignesh/.rvm/gems/ruby-2.4.1/gems/devise-4.4.1/lib/devise/test/controller_helpers.rb:35:in `block in process'
/Users/vignesh/.rvm/gems/ruby-2.4.1/gems/devise-4.4.1/lib/devise/test/controller_helpers.rb:102:in `catch'
/Users/vignesh/.rvm/gems/ruby-2.4.1/gems/devise-4.4.1/lib/devise/test/controller_helpers.rb:102:in `_catch_warden'
/Users/vignesh/.rvm/gems/ruby-2.4.1/gems/devise-4.4.1/lib/devise/test/controller_helpers.rb:35:in `process'
/Users/vignesh/.rvm/gems/ruby-2.4.1/gems/rails-controller-testing-1.0.2/lib/rails/controller/testing/integration.rb:12:in `block (2 levels) in <module:Integration>'
./spec/controllers/posts_controller_spec.rb:25:in `block (3 levels) in <top (required)>'

I am using Rails 5.1.4

ruby 4.4.1

factory bot 4.0
rspec 3.4

Can any one help me


Solution

  • The code have to be like this

     describe 'POST create' do
        it 'creates a new Post' do
          expect {
            post :create, params: {topic_id: @topic, post: @post_attributes}
          }.to change(Post, :count).by(1)
        end
    

    And this works now