全部。我是Ruby on Rails的初学者。有一个错误,我一直在努力,但无法解决。
我试图查看messages_controller.rb
中声明的变量@chat_group是否匹配message_controller_spec.rb
中声明的另一个变量。我没有任何线索来解决这个错误,因为我100%肯定我正在给出我应该给予的参数,就像路线所说的那样是chat_group_id。
有没有人有任何洞察力来解决这个问题? 或者之前有人遇到过类似的问题吗?
如果您有或有,请您解决此问题? 任何意见,将不胜感激!谢谢你的支持!
1) MessagesController#GET index when the user logs in Checking if the variable in index action matches
Failure/Error: get :index, params: index_params
ActionController::UrlGenerationError:
No route matches {:action=>"index", :controller=>"messages", :params=>{:chat_group_id=>"522"}}
# ./spec/controllers/messages_controller_spec.rb:13:in `block (4 levels) in <top (required)>'
messages_controller_spec.rb
RSpec.describe MessagesController, type: :controller do
let(:chat_group) { create(:chat_group) }
let(:message) { create(:message) }
let(:index_params) { { chat_group_id: chat_group } }
describe '#GET index' do
context 'when the user logs in' do
login_user
it 'Checking if the variable in index action matches' do
get :index, params: index_params
expect(assigns(:chat_group)).to eq chat_group
end
end
end
end
Route.rb
chat_group_messages GET /chat_groups/:chat_group_id/messages(.:format) messages#index
POST /chat_groups/:chat_group_id/messages(.:format) messages#create
chat_groups GET /chat_groups(.:format) chat_groups#index
POST /chat_groups(.:format) chat_groups#create
new_chat_group GET /chat_groups/new(.:format) chat_groups#new
edit_chat_group GET /chat_groups/:id/edit(.:format) chat_groups#edit
chat_group PATCH /chat_groups/:id(.:format) chat_groups#update
PUT /chat_groups/:id(.:format) chat_groups#update
MessageController.rb
class MessagesController < ApplicationController
before_action :set_chat_group
def index
@chat_groups = current_user.chat_groups
@messages = @chat_group.messages
@message = Message.new
respond_to do |format|
format.html { render :index }
format.json { render json:
@chat_group.messages.includes(:user).map{|x| x.json_api} }
end
end
private
def set_chat_group
@chat_group = ChatGroup.find(params[:chat_group_id])
end
end
更新
我解决了错误!我在下面的评论中提出了解决问题的方法!
答案 0 :(得分:0)
尝试将type: controller
更改为type: request
?
您也可以使用request type
并指定路径:
get chat_group_messages_path(chat_group.id), index_params
干杯
答案 1 :(得分:0)
我认为你做的一切都是正确的。
但是这一行:expect(assigns(:group)).to eq group
您期望assigns(:group)
但我在您正在测试的索引操作中看不到任何名为group
的变量。
您也希望它与“eq group
”组相同,但在上例中的let
块中,不存在名为group
的变量。
所以尽量做expect(assigns(:chat_groups)).to eq chat_group
assigns(:chat_groups)
在您的操作中使用与实例变量相同的名称,而eq chat_group
使用let块中的变量名称