How testing associated objects?

please help solve the problem.

poll controller:

class PollsController < ApplicationController
def index
@user = User.find(params[:user_id])
@polls = @user.polls.paginate(page: params[:page], :per_page =>
10).order(title: :DESC)
end
end

route:

user_polls GET /users/:user_id/polls(.:format)
polls#index

polls_controller_spec.rb:
RSpec.describe PollsController, type: :controller do
describe “GET #index” do
before :all do
@user = FactoryGirl.create(:user)
end

it "assign user as @user" do
  get :index, user_id: @user.id
  expect(assigns(:user)).to eq(@user)
end


it "assigns polls as @polls" do
  get :index, user_id: @user.id
  expect(assigns(:polls)).to eq([@poll])
end


it "redirects to the index view" do
  get :index, user_id: @user.id
  expect(response).to render_template("index")
end

end
end

after run tests, i get follow error message:

[email protected] ~/rails/phs $ rspec
spec/controllers/polls_controller_spec.rb
.F.
Failures:

  1. PollsController GET #index assigns polls as @polls
    Failure/Error: expect(assigns(:polls)).to eq([@poll])
    expected: [nil]
    got: #<ActiveRecord::AssociationRelation []>
    (compared using ==)
    Diff:
    @@ -1,2 +1,2 @@
    -[nil]
    +[]

    ./spec/controllers/polls_controller_spec.rb:16:in `block (3

levels) in <top (required)>’

Finished in 1.23 seconds (files took 2.81 seconds to load)
3 examples, 1 failure
Failed examples:
rspec ./spec/controllers/polls_controller_spec.rb:14 # PollsController
GET #index assigns polls as @polls

as you can see problem in test ‘assigns polls as @polls’. I do not
understand why array @polls is empty

10).order(title: :DESC)
describe “GET #index” do

end
expected: [nil]
3 examples, 1 failure
Failed examples:
rspec ./spec/controllers/polls_controller_spec.rb:14 # PollsController
GET #index assigns polls as @polls

as you can see problem in test ‘assigns polls as @polls’. I do not
understand why array @polls is empty

I think you need to add a factory for polls, and ensure that you assign
a poll to that array before you test to see if there are any. Each test
runs alone, and not in a predictable order unless you’ve disabled the
test randomization feature in Rspec. Each test has a completely new and
fresh look at the application, with no preconceived data to work with
unless you provide it in your test, as you have done for the @user here.

Walter

On Tuesday, 1 September 2015 14:40:39 UTC-4, Ruby-Forum.com User wrote:

end
before :all do
it “assigns polls as @polls” do
end
got: #<ActiveRecord::AssociationRelation []>
Failed examples:
rspec ./spec/controllers/polls_controller_spec.rb:14 # PollsController
GET #index assigns polls as @polls

as you can see problem in test ‘assigns polls as @polls’. I do not
understand why array @polls is empty

Unless you accidentally removed it when posting here, you aren’t
creating
any Poll records. @poll is also not set to anything…

–Matt J.

Being from India, this a question to Ruby on rails experts in India… i
have some doubts regarding risk based testing? how to perform it?

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs