我有一个名为“精彩”的宝石,里面有一个虚拟应用进行测试。运行虚拟应用程序时,一切运行良好。
然而,当我运行测试时,单元测试工作正常,但集成测试( Capybara + Poltergeist )失败并显示消息:
Sprockets :: FileNotFound:无法找到带有类型的文件'jquery' '应用程序/ JavaScript的'。
检查这些路径:
/奇妙/规格/虚设/应用程序/资产/图像, /梦幻/规格/空/应用/资产/ JavaScript的, /梦幻/规格/空/应用/资产/样式表, /梦幻/应用/资产/ JavaScript的, /梦幻/应用/资产/样式表, /奇妙/供应商/资产/ Javascript角
我的一些文件:
fantastic.gemspec
# ...
s.add_development_dependency "capybara"
s.add_development_dependency "poltergeist"
s.add_development_dependency "jquery-rails"
# ...
规格/虚设/应用程序/资产/ Javascript角/ application.js中
//= require jquery // Error is produced in this line
//= require jquery_ujs
//= require fantastic
//= require_tree .
问题是,当运行 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
鉴于虚拟应用程序位于spec/dummy/
文件夹中。
这是我运行测试时得到的错误
失败/错误:期待(页面).to have_content“用户” 期望在“未找到:/ users”中找到文本“Users”。 (但是,使用不区分大小写的情况发现了一次 搜索。) './spec/features/record_updated_spec.rb:6:在'块(2级)中'
答案 0 :(得分:7)
这最终解决了这个问题。
module Fantastic
class Engine < ::Rails::Engine
require 'jquery-rails' # <-- this line
isolate_namespace Megaphone
end
end