Rspec Rails表单_有(远程:true)错误
我需要一些帮助 当我尝试从Rails使用ajax更新模型时,我遇到了一个错误(form_with/remote:true)。我能够很好地处理由Rails提供资源的URL的XHR请求(请参阅下面的路由),但对于自定义URL,我遇到了一个错误 控制器: rspec(请求): 视图: 正如您在test.log中所看到的,Rspec Rails表单_有(远程:true)错误,rspec,rspec-rails,ruby-on-rails-5.2,Rspec,Rspec Rails,Ruby On Rails 5.2,我需要一些帮助 当我尝试从Rails使用ajax更新模型时,我遇到了一个错误(form_with/remote:true)。我能够很好地处理由Rails提供资源的URL的XHR请求(请参阅下面的路由),但对于自定义URL,我遇到了一个错误 控制器: rspec(请求): 视图: 正如您在test.log中所看到的,由UserController处理#criar As没有特定的格式(也许这就是问题所在?) test.log: 错误消息: 另一个请求测试 错误消息 失败/错误:预期(响应)。将\u重
由UserController处理#criar As
没有特定的格式(也许这就是问题所在?)
test.log:
错误消息:
另一个请求测试
错误消息
失败/错误:预期(响应)。将\u重定向到(新的\u会话\u路径)
预期响应为a,但为a
回复主体:若要继续,请登录。
意见:
- 我已尝试将路由上的url更改为:
put'/criar',to:'user#criar',约束:->(req){req.xhr?}
- 如前所述,我使用
form_中的XHR和
对其他资源进行了相同的操作(测试、控制器),它们工作正常。这是一个自定义url无效的
- 轨道5.2和Rspec 3.6
- 任何问题,只需提出评论即可
提前谢谢 按照建议,在
响应
块之前,尝试调用request.xhr?
问题的原因
嗯,经过一番探索,我找到了答案
与ActionController::UnknownFormat
消息相关的问题是由于请求没有得到很好的定义,正如我发布的日志所示:
用户控制器#criar as处理
句子末尾缺少类型/格式(HTML/JS/…等)
这个问题是由两个因素引起的:
user\u criar\u path(1)
或put user\u criar\u path(user),xhr:true,参数:{…}
get'/user/new',to:'user#new'#定义我自己的路线
而不是
resources:user,仅限:[:new]
#由Rails定义
观察:对于Rails(参考资料)定义的路由,将参数传递到生成的路径不会引发错误ActionController::UnknownFormat
解决方案
从生成的路径中删除参数(对于Rspec和Rails):
或
谢谢你的帮助,我找到并发布了解决方案!
def criar
@user = current_user
respond_to do |format|
if @user.update_attributes(user_params)
format.js {
flash[:success] = "Success!"
redirect_to root_path
}
else
format.js
end
end
end
put user_criar_path(user), xhr: true,
:params => { ... }
<%= form_with model: @user, url: user_criar_path(@user), method: :put do |f| %>
namespace :any do
namespace :things do
put '/criar', to: 'user#criar' # problem with XHR
put '/atualizar', to: 'user#atualizar' # problem with XHR
end
end
resources :anything # this one works fine with XHR
Processing by UserController#criar as
Parameters: { ... }
Failure/Error:
respond_to do |format|
if @user.update_attributes(user_params)
format.js {
flash[:success] = "Success!"
redirect_to root_path
}
else
format.js
end
ActionController::UnknownFormat:
ActionController::UnknownFormat
it "should be redirect to (criar)" do
put user_criar_path(1), xhr: true
expect(response).to redirect_to(new_session_path)
expect(request.flash_hash.alert).to eq "To continue, please, sign in."
end
Failure/Error: expect(response).to redirect_to(new_session_path)
Expected response to be a <3XX: redirect>, but was a <401: Unauthorized>
Response body: To continue, please, sign in.
put user_criar_path, params: { "user" => { "id" => 1 } }
put user_criar_path, xhr: true, :params => { ... }