如何使用嵌套路由测试控制器?

How to test controller with nested route?

请帮忙解决这个问题。我需要索引操作的测试渲染模板。

routes.rb:

resources :users do
  resources :albums
end

rake 路线:

user_albums GET    /users/:user_id/albums(.:format)             albums#index

相册控制器:

class AlbumsController < ApplicationController
  before_action :set_album, only: [:show, :edit, :update, :destroy, :get_album_data]

  def index
    @user = User.find(params[:user_id])
    @albums = @user.albums.paginate(page: params[:page], :per_page => 6).order(created_at: :DESC)
    @album = Album.new
  end

  .........
  .........

  private
    def set_album
      @album = Album.find(params[:id])
    end

    def album_params
      params.require(:album).permit(:title, :description)
    end   
end

albums_controller_spec.rb:

require 'spec_helper'

    describe AlbumsController do
      describe 'index action' do
        it 'render index template if user is found' do
          user = FactoryGirl.create(:user)
          get :index, { user_id: user.id }
          response.should render_template('index')
        end
      end
    end

工厂:

FactoryGirl.define do
  factory :user do
    name 'qqq'
    sequence(:email){ |i| "use#{i}@ad.ad" }
    password 'qwerty'
    password_confirmation{ |u| u.password } 
  end
end

我在控制台中运行它:

rake db:reset RAILS_ENV=test
rspec spec

控制台显示以下错误消息:

F.

Failures:

  1) AlbumsController index action render index template if user is found
     Failure/Error: get :index, { user_id: user.id }
     NoMethodError:
       undefined method `get' for #<RSpec::ExampleGroups::AlbumsController::IndexAction:0x000000067fc668>
     # ./spec/controllers/albums_controller_spec.rb:7:in `block (3 levels) in <top (required)>'


Finished in 0.13261 seconds (files took 1.91 seconds to load)
2 examples, 1 failure

Failed examples:

rspec ./spec/controllers/albums_controller_spec.rb:5 # AlbumsController index action render index template if user is found

请帮助我完成 'index' 测试操作

您遇到的当前错误

undefined method `get' for #<RSpec::ExampleGroups::AlbumsController

是因为您需要将规范指定为控制器规范,类型为::controller。

describe AlbumsController, type: :controller do