Capybara-webkit:没有正确执行coffeescript

时间:2016-10-31 00:24:09

标签: ruby-on-rails rspec coffeescript capybara capybara-webkit

我有一个按钮,当它被点击时,它会触发ajax帖子,并呈现警告​​。

效果很好,但在进行测试时,咖啡因并没有很好地执行。

我的文件

应用/视图/警报/ index.html.haml

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

应用/控制器/ alerts_controller.rb

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

应用/视图/警报/ 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'

结果

测试失败, page.driver.console_messages 返回此信息:

  

{:line_number =&gt; 0,:message =&gt;&#34; ReferenceError:无法找到变量:AlertComponent&#34;,:source =&gt;&#34; undefined&#34;} < / p>

正如我已经说过的,它在开发和生产方面非常有用。问题在于测试。

我的设置

我正在使用Capybara-webkit:

  • capybara(2.9.2)
  • capybara-webkit(1.1.0)

规格/ rails_helper.rb

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

关于为什么这不能按预期工作的任何想法?

1 个答案:

答案 0 :(得分:0)

在讨论rails资产管道时,开发和测试/生产之间的最大区别在于,在开发过程中,每个JS文件都是单独提供的,而在测试/生产中,它们被连接在一起并作为一个文件提供。这意味着一个文件中的JS错误不会阻止其他文件在开发模式下处理,但它可以处于测试/生产模式。看起来它可能在创建AlertComponent类之前中止对连接文件的评估。

在开发模式下运行应用程序时检查浏览器开发人员控制台,并修复正在记录的任何JS错误。