2017-02-27 68 views
1

我有一段非常凌亂的Rails應用程序,我前一段時間建立了,目前正在擴展。這涉及Ruby版本(1.9.x到2.3.x),Rails版本(3.2.x到5.0.x)以及許多其他相關更改的一些重大更改。它有很多的瑕疵,我不確定此刻正在進行的很多事情。爲什麼我的rspec測試向javascripts/sessions.js發送獲取請求?

爲了理清我爲自己創造的這個可怕的爛攤子,我決定用RSpec和水豚寫一堆功能測試。直到我需要測試使用Javascript的東西時,我才取得了很好的進展(最終我的大部分功能測試都將測試Javascript)。

我的Rspec測試看起來像這樣到目前爲止(還有很多工作要完成 - 我只是在這裏卡住);

feature "User registers a new customer", js: true do 
    scenario "Logged in user registers a new customer" do 
     user = FactoryGirl.create(:user) 
     visit_root_and_login user 
     fill_in 'reg_number', with: '123456' 
     click_button 'Look up' 
    end 
end 

在我的應用程序這會觸發一個AJAX調用查找註冊號,並返回一段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」。我沒有這樣的文件,我自己也沒有提出這個要求。它似乎來自Rack,但這是Ruby和Rails世界的一個區域,我真的不明白。

任何人都可以擺脫這種情況,所以我至少知道從哪裏開始尋找?

TIA

+0

你可以試試'rake assets:clobber'嗎? – fabersky

+0

謝謝你看看。它沒有改變任何東西。 – brad

回答

1

好的,我整理了一下。

這是一個資產管道問題。

在我的application.html.haml我有= javascript_include_tag "application", params[: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爲了得到它的所有工作。

在我的開發環境中,在服務器控制檯中引發了同樣的異常,但是我沒有注意到它,也沒有停止執行。在水豚,這個例外是停止整個節目。

相關問題