如何使用嵌套路由测试控制器?
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
请帮忙解决这个问题。我需要索引操作的测试渲染模板。
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