繁体   English   中英

创建插件时,如何使Capybara在插件目录中查看Javascript?

[英]How to get Capybara to see Javascript in plugin directory when creating plugins?

我们正在开发用于Rails的插件,而Cucumber与Capybara的合作非常出色。 但是,在开发时,我一直(错误地认为)将Javascript文件放在父测试应用程序的public / javascript目录中。 因此,当Capybara运行时,找不到JavaScript文件。 我们如何让Cucumber / Capybara看到那些JS文件?

更多细节:

因此,布局“ reports.html.haml”是指“ src ='/ javascripts / ...'”,但是当我从vendor / plugins / reporter目录中运行Cucumbara时,水豚找不到JS文件(我认为)。 因此,我应该从应用程序根目录运行Cucumber,并包含插件的文件,还是需要在其他地方包含JS文件(例如,在vendor / plugin / reporter层次结构中的某个位置)?

这是我们当前的PLUGIN目录布局:

|~app/
| |~controllers/
| | `-reports_controller.rb
| |~models/
| | `-report.rb
| `~views/
|   |~layouts/
|   | `-reports.html.haml
|   `~reports/
|     |-edit.html.haml
|     |-index.html.haml
|     |-new.html.haml
|     |-show.html.haml
|     `-show.js.erb
|+autotest/
|+config/
|~features/
| |+step_definitions/
| |+support/
| `-reports.feature
|+generators/
|+lib/
|+spec/
|...

听起来您需要将插件构建为Rails引擎,以便可以将JavaScript放入插件中,但仍可以从父应用程序访问它们。

这取自我正在构建的具有类似要求的插件。 要包含javascript,您可以使用javascript_include_tag 'my-plugin/javascripts/foo.js'类的东西, javascript_include_tag 'my-plugin/javascripts/foo.js'该文件位于[plugin_path]/public/javascripts/foo.js

module MyPlugin
  class Engine < Rails::Engine
    config.mount_at = '/my-plugin/'

    initializer "static assets" do |app|
      app.middleware.use ::ActionDispatch::Static, "#{root}/public"
    end
  end
end

Capybara不需要直接查看Javascript文件-需要在应用程序的视图中将其提供。 您必须使用生成器或rake任务将它们部署到那里(由于资产是由Web服务器直接提供的,因此您不能使用运行时路径。)

为了让Capybara能够看到Javascript的结果,您需要使用一种启用Javascript的驱动程序-默认驱动程序会启动Rack并对其进行综合查询。 我在Selenium上获得了最大的成功,但是env.js如果兼容,则意味着它会更快,因为它不需要摆弄实际的浏览器。 请注意,一旦您需要一个浏览器兼容性插件(jQuery,Prototype,Mootools等),env.js便会出现故障。

如果您在插件中使用大量Javascript,我强烈建议您使用Jasmine-它的设计类似于RSpec,但在Javascript中,用于测试实际的JS代码确实非常快。

我一直在使用黄瓜和水豚,而对javascript没有任何问题。

您能否发布相关的堆栈跟踪和相关的错误以查看发生了什么?

(本来会发表评论,但是a,我还不能)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM