0

私がクリックされたときに、それはAjaxのポストをトリガし、アラートをレンダリングするボタンがあります。カピバラ-のWebKit:CoffeeScriptの実行していない適切

それは素晴らしい作品が、テストを実行するときに、CoffeeScriptのはうまく実行されません。

マイファイル

アプリ/ビュー/警告/ index.html.haml

= link_to icon('plus', 'Show Alert'), new_alert_path, class: 'btn btn-with-icon btn-primary', remote: true 

アプリ/コントローラ/

class AlertsController < BaseController 
    def new 
    @alert = Alert.new 
    end 
end 

アプリ/ビューalerts_controller.rb /alerts/new.js.coffee

console.log "1" # => This is being executed 
AlertComponent.show "show this message" # Here it breaks I think 
console.log "2" # => It never arrives here 

アプリ/資産/ javascriptの/ alert_component.js.coffee

class AlertComponent 
    @show: (description) -> 
    console.log "3" # => This is not being executed 
    # => Does some other stuff 

end 

window.AlertComponent = AlertComponent 

私のテスト

click_link 'Show Alert' # => This is executed because I added a binging.pry in the controller and it arrives properly 
wait_for_ajax 
p page.driver.console_messages # => Below is what it returns 
expect(page).to have_css '.alert-div' 

結果

テストが失敗した、とページ。 driver.console_messagesはこれを返します:

{:line_number=>0, :message=>"ReferenceError: Can't find variable: AlertComponent", :source=>"undefined"}

私がすでに言ったように、それは開発と生産に大きく役立ちます。問題はテストにあります。

マイセットアップ

私はカピバラ-webkitのを使用しています:

  • カピバラ(2.9.2)
  • カピバラ、WebKitの(1.1.0)

スペック/ rails_helper

ENV['RAILS_ENV'] ||= 'test' 
require File.expand_path('../../config/environment', __FILE__) 
# Prevent database truncation if the environment is production 
abort("The Rails environment is running in production mode!") if Rails.env.production? 
require 'spec_helper' 
require 'rspec/rails' 

Capybara.javascript_driver = :webkit 

# more stuff 
.RB

これが期待どおりに機能しない理由についてのアイデアはありますか?

答えて

0

レールアセットパイプラインの話を、開発およびテスト/本番の大きな違いは、テスト/製造で、彼らは一緒に連結を取得し、1つのファイルとして務めながら、開発の各JSファイルは、別途提供されていることです。これは、あるファイルのJSエラーが他のファイルが開発モードで処理されるのを止めるわけではなく、テスト/プロダクションモードで実行できることを意味します。 AlertComponentクラスが作成される前に、おそらく連結ファイルの評価を中止しているようです。

は、DEVモードでアプリケーションを実行するときに、あなたのブラウザのデベロッパーコンソールをチェックして、ログに記録されている任意のJSのエラーを修正します。

+0

あなたのコメントをありがとう。しかし、jsエラーはなく、プロダクションモードでは完璧に動作します。 –

+0

@ArielScherman次に、プロダクションで動作することを質問に追加してください。とにかく、AlertComponentが存在しないというエラーはalert_component.js.coffeeがアセットパイプラインに含まれていないか、ファイルがロードされても処理されていないことを示しています。実際にファイルが含まれていると仮定すると(これはdevで動作するため)、これは、ファイルにJSエラーがあること(あなたは何も言わない)、capybara-webkitが処理できないES6メソッドの使用古いQt)、またはレールアセットパイプラインの設定ミス。 –

+0

問題は、あなたが言及したように、資産の連結であるようでした。アセットのデバッグモードをfalseにして、AlertComponentに関するエラーを表示しました。しかし、それはうまくいくの生産で正常に動作します。コンポーネントに関して何か間違っているかどうか分かりますか?私は "require_tree"を持っています。私のapplication.jsとalertComponentファイルには、上記の説明で追加したファイルがあります。 –

関連する問題