Ruby on rails 为什么我的rspec测试向javascripts/sessions.js发送get请求?

Ruby on rails 为什么我的rspec测试向javascripts/sessions.js发送get请求?,ruby-on-rails,rspec,capybara,rspec-rails,capybara-webkit,Ruby On Rails,Rspec,Capybara,Rspec Rails,Capybara Webkit,我有一个非常混乱的Rails应用程序,是我不久前构建的,目前正在扩展。这涉及到对Ruby版本(1.9.x到2.3.x)、Rails版本(3.2.x到5.0.x)以及许多其他相关更改的大量重大更改。它有很多粗制滥造的东西,我不确定目前在它里面发生的很多事情 为了解决我为自己造成的这种糟糕局面,我决定用RSpec和Capybara编写一系列特性测试。在我需要测试一些使用Javascript的东西之前,我一直在取得良好的进展(最终我的大部分功能测试都将测试Javascript) 到目前为止,我的Rsp

我有一个非常混乱的Rails应用程序,是我不久前构建的,目前正在扩展。这涉及到对Ruby版本(1.9.x到2.3.x)、Rails版本(3.2.x到5.0.x)以及许多其他相关更改的大量重大更改。它有很多粗制滥造的东西,我不确定目前在它里面发生的很多事情

为了解决我为自己造成的这种糟糕局面,我决定用RSpec和Capybara编写一系列特性测试。在我需要测试一些使用Javascript的东西之前,我一直在取得良好的进展(最终我的大部分功能测试都将测试Javascript)

到目前为止,我的Rspec测试看起来是这样的(还有很多事情要完成——我只是被困在这里)

在我的应用程序中,这会触发一个AJAX调用,该调用会查找注册号并返回一段Javascript,该Javascript会根据客户之前是否注册,向表单中添加其他字段

但是发生的事情是这样的

Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}"

 ActionController::RoutingError:
   No route matches [GET] "/javascripts/sessions.js"
 # /Users/brad/.gem/ruby/2.3.1/gems/railties-5.0.1/lib/rails/rack/logger.rb:36:in `call_app'
 # /Users/brad/.gem/ruby/2.3.1/gems/railties-5.0.1/lib/rails/rack/logger.rb:24:in `block in call'
 # /Users/brad/.gem/ruby/2.3.1/gems/railties-5.0.1/lib/rails/rack/logger.rb:24:in `call'
 # /Users/brad/.gem/ruby/2.3.1/gems/rack-2.0.1/lib/rack/method_override.rb:22:in `call'
 # /Users/brad/.gem/ruby/2.3.1/gems/rack-2.0.1/lib/rack/runtime.rb:22:in `call'
 # /Users/brad/.gem/ruby/2.3.1/gems/rack-2.0.1/lib/rack/sendfile.rb:111:in `call'
 # /Users/brad/.gem/ruby/2.3.1/gems/railties-5.0.1/lib/rails/engine.rb:522:in `call'
 # /Users/brad/.gem/ruby/2.3.1/gems/rack-2.0.1/lib/rack/urlmap.rb:68:in `block in call'
 # /Users/brad/.gem/ruby/2.3.1/gems/rack-2.0.1/lib/rack/urlmap.rb:53:in `each'
 # /Users/brad/.gem/ruby/2.3.1/gems/rack-2.0.1/lib/rack/urlmap.rb:53:in `call'
 # /Users/brad/.gem/ruby/2.3.1/gems/capybara-2.12.1/lib/capybara/server.rb:43:in `call'
 # /Users/brad/.gem/ruby/2.3.1/gems/rack-2.0.1/lib/rack/handler/webrick.rb:86:in `service'
 # ------------------
 # --- Caused by: ---
 # NameError:
 #   uninitialized constant Selenium::WebDriver::Remote::W3CCapabilities
 #   /Users/brad/.gem/ruby/2.3.1/gems/capybara-2.12.1/lib/capybara/selenium/driver.rb:282:in `marionette?'
我试着添加
driver::webkit
,看看是否发生了什么变化,得到了一些稍微不同的结果

 Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}"

 ActionController::RoutingError:
   No route matches [GET] "/javascripts/sessions.js"
 # /Users/brad/.gem/ruby/2.3.1/gems/railties-5.0.1/lib/rails/rack/logger.rb:36:in `call_app'
 # /Users/brad/.gem/ruby/2.3.1/gems/railties-5.0.1/lib/rails/rack/logger.rb:24:in `block in call'
 # /Users/brad/.gem/ruby/2.3.1/gems/railties-5.0.1/lib/rails/rack/logger.rb:24:in `call'
 # /Users/brad/.gem/ruby/2.3.1/gems/rack-2.0.1/lib/rack/method_override.rb:22:in `call'
 # /Users/brad/.gem/ruby/2.3.1/gems/rack-2.0.1/lib/rack/runtime.rb:22:in `call'
 # /Users/brad/.gem/ruby/2.3.1/gems/rack-2.0.1/lib/rack/sendfile.rb:111:in `call'
 # /Users/brad/.gem/ruby/2.3.1/gems/railties-5.0.1/lib/rails/engine.rb:522:in `call'
 # /Users/brad/.gem/ruby/2.3.1/gems/rack-2.0.1/lib/rack/urlmap.rb:68:in `block in call'
 # /Users/brad/.gem/ruby/2.3.1/gems/rack-2.0.1/lib/rack/urlmap.rb:53:in `each'
 # /Users/brad/.gem/ruby/2.3.1/gems/rack-2.0.1/lib/rack/urlmap.rb:53:in `call'
 # /Users/brad/.gem/ruby/2.3.1/gems/capybara-2.12.1/lib/capybara/server.rb:43:in `call'
 # /Users/brad/.gem/ruby/2.3.1/gems/rack-2.0.1/lib/rack/handler/webrick.rb:86:in `service'
 # ------------------
 # --- Caused by: ---
 # Capybara::ElementNotFound:
 #   Unable to find field "reg_number"
 #   /Users/brad/.gem/ruby/2.3.1/gems/capybara-2.12.1/lib/capybara/node/finders.rb:44:in `block in find'
我不明白为什么要调用“/javascripts/sessions.js”。我没有任何这样的文件,我自己也没有提出这个要求。它看起来来自机架,但这是Ruby和Rails世界的一个区域,我真的不明白

有没有人能解释这件事,让我至少知道从哪里开始找

TIA

好的,我把这个问题解决了

这是一个资产管道问题

在我的
application.html.haml
中,我有
=javascript_include_标记“application”,参数[:controller]
,这导致在登录过程中试图将文件
/app/assets/javascripts/sessions.js
包含在我的资产中。我没有这样的文件,所以创建了一个空白文件。然后我不得不补充一句

%w( sessions ).each do |controller|
  Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end
到我的
/app/config/initializers/assets.rb
,让一切正常运行


在我的开发环境中,服务器控制台中出现了相同的异常,但我没有注意到它,它也没有停止执行。但在水豚中,这个例外使整个节目停止了。

你能试试《rake assets:clobber》吗??谢谢你的关注。这没有改变任何事情。
%w( sessions ).each do |controller|
  Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end