[英]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.