gpt4 book ai didi

ruby-on-rails - rspec - 使用命名空间时,rails 路由到错误的 Controller ,但只是有时

转载 作者:行者123 更新时间:2023-12-04 17:02:01 25 4
gpt4 key购买 nike

请耐心等待,在发布此内容之前我已经尝试了很多方法,但我不确定您到底需要什么才能帮助我解决此问题。请告诉我,我会更新代码。

我遇到随机失败规范的问题,所以我运行了 --bisect使用 rspec 命令找出规范失败的原因。
似乎如果我按特定顺序运行 2 个规范,规范就会失败。

我正在运行的命令是这样的:

be rspec './spec/features/scheduling/scheduler_spec.rb[1:3:1,1:3:2:1,1:3:2:2:1,1:3:2:2:2,1:3:3,1:3:4,1:3:5,1:3:6]' './spec/requests/api/v1/shifts_spec.rb[1:1:2]' --seed 16251

路由引擎好像觉得下面这个链接应该去 Api::ShifsController什么时候应该转到 ShiftsController :
= link_to new_shift_path(date: date.to_date, user_id: user.try(:id)), remote: true do
= fa_icon "plus fw"

路线:
Rails.application.routes.draw do
root 'landing_page#index'
..
resources :shifts, only: [:new, :create, :destroy]
# API
namespace :api, defaults: { format: 'json' } do
scope :v1 do
resources :locations, only: [:index] do
resources :shifts, only: [:index]
end
end
end

gem 文件:
ruby '2.4.1'
..
gem 'rails', '~> 5.0.2'
gem 'capybara', '~> 2.16'
gem 'selenium-webdriver', '~> 3.7.0'
..

我得到的错误是这样的:
Failure/Error: raise ActionNotFound, "The action '#{action}' could not be found for #{self.class.name}"
AbstractController::ActionNotFound:
The action 'new' could not be found for Api::ShiftsController

笔记!这仅在运行规范时有时会发生。它永远不会发生在开发或生产中。嗯,我还没有经历过。
如果我注释掉 resources :shifts, only: [:new, :create, :destroy]从路由文件中,一切都恢复正常。
我不知道如何继续。

最佳答案

这可能是由于 Rails 自动加载在 ShiftsController 和 API::ShiftsController(或 Shifts 和 API::Shifts 模型,如果它们存在)之间混淆,这取决于哪个在测试中首先使用,然后认为它不需要加载其他。要解决此问题,请尝试要求在每个规范中使用的特定 Controller 和/或模型定义文件位于规范文件的顶部。

像这样:

# spec/features/scheduling/scheduler_spec.rb
require "#{Rails.root}/app/controllers/shifts_controller"

# spec/features/api/shifts_spec.rb
require "#{Rails.root}/app/controllers/api/shifts_controller"

关于ruby-on-rails - rspec - 使用命名空间时,rails 路由到错误的 Controller ,但只是有时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47635975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com