请耐心等待,在发布此内容之前,我已尝试了很多其他内容,而且我不确定您需要什么才能帮助我。请告诉我,我会更新代码。
我遇到了随机失败规范的问题,因此我使用rspec运行--bisect
命令以找出规范失败的原因。
似乎如果按特定顺序运行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
的Gemfile:
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]
,一切都会恢复正常。
我不知道该怎么办。
答案 0 :(得分:1)
这可能是由于Rails自动加载在ShiftsController和API :: ShiftsController(或Shifts和API :: Shifts模型,如果存在)之间混淆,这取决于在测试中首先使用哪个,然后认为它不需要加载另一个。要解决这个问题,需要在规范文件顶部的每个规范中使用特定的控制器和/或模型定义文件。
像这样:
# 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"