私がクリックされたときに、それは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
これが期待どおりに機能しない理由についてのアイデアはありますか?
あなたのコメントをありがとう。しかし、jsエラーはなく、プロダクションモードでは完璧に動作します。 –
@ArielScherman次に、プロダクションで動作することを質問に追加してください。とにかく、AlertComponentが存在しないというエラーはalert_component.js.coffeeがアセットパイプラインに含まれていないか、ファイルがロードされても処理されていないことを示しています。実際にファイルが含まれていると仮定すると(これはdevで動作するため)、これは、ファイルにJSエラーがあること(あなたは何も言わない)、capybara-webkitが処理できないES6メソッドの使用古いQt)、またはレールアセットパイプラインの設定ミス。 –
問題は、あなたが言及したように、資産の連結であるようでした。アセットのデバッグモードをfalseにして、AlertComponentに関するエラーを表示しました。しかし、それはうまくいくの生産で正常に動作します。コンポーネントに関して何か間違っているかどうか分かりますか?私は "require_tree"を持っています。私のapplication.jsとalertComponentファイルには、上記の説明で追加したファイルがあります。 –