Gem集成测试失败,找不到jQuery

asc*_*man 12 rspec ruby-on-rails capybara poltergeist

我有一个名为" 神奇 " 的宝石,里面有一个虚拟应用程序来测试.在运行虚拟应用程序时,一切运行良好.

但是,当我运行测试时,单元测试工作正常,但集成测试(Capybara + Poltergeist)失败并显示以下消息:

Sprockets :: FileNotFound:找不到类型为'application/javascript'的文件'jquery'.

检查这些路径:

/ fantastic/spec/dummy/app/assets/images,/ fantastic/spec/dummy/app/assets/javascripts,/ fantastic/spec/dummy/app/assets/stylesheets,/ fantastic/app/assets/javascripts,/ fantastic/app/assets/stylesheets,/ fantastic/vendor/assets/javascripts

我的一些文件:

fantastic.gemspec

# ...
s.add_development_dependency "capybara"
s.add_development_dependency "poltergeist"
s.add_development_dependency "jquery-rails"
# ...
Run Code Online (Sandbox Code Playgroud)

规格/虚拟/应用/资产/ JavaScript的/ application.js中

//= require jquery // Error is produced in this line
//= require jquery_ujs
//= require fantastic
//= require_tree .
Run Code Online (Sandbox Code Playgroud)

问题是当运行rails服务器时一切正常,并且正确加载了jQuery(我在浏览器的控制台中测试了它).

知道测试中发生了什么吗?

编辑

我尝试创建自定义Capybara.app:

投机/ spec_helper.rb

ENV["RAILS_ENV"] = 'test'
# Require dummy Rails app
require File.expand_path("../../spec/dummy/config/environment", __FILE__)

require 'database_cleaner'
require 'rspec/rails'
require 'capybara/rspec'
require 'capybara/poltergeist'

# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}

require 'capybara/dsl'

Capybara.app = Rack::Builder.new do
  map "/spec/dummy/" { run Rails.application }
end.to_app

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, {js_errors: false})
end
Capybara.javascript_driver = :poltergeist

RSpec.configure do |config|
  # If true, the base class of anonymous controllers will be inferred
  # automatically. This will be the default behavior in future versions of
  # rspec-rails.
  config.infer_base_class_for_anonymous_controllers = false
  config.infer_spec_type_from_file_location!
end
Run Code Online (Sandbox Code Playgroud)

鉴于虚拟应用程序在spec/dummy/文件夹中.

这是我运行测试时得到的错误

失败/错误:期望(页面).to_content"用户"希望在"未找到:/ users"中找到文本"Users".(但是,使用不区分大小写的搜索发现了一次.)#./ spec /features/record_updated_spec.rb:6:在'块(2级)中'

asc*_*man 7

这就是最终解决问题的方法.

module Fantastic
  class Engine < ::Rails::Engine
    require 'jquery-rails' # <-- this line

    isolate_namespace Megaphone
  end
end
Run Code Online (Sandbox Code Playgroud)