我正在开发一个Rails插件,该插件将包含在从CDN加载jQuery的Rails应用程序中。然而,我在我的插件中运行Jasmine测试时遇到了问题。我需要在app/assets/ javascript中的源javascript文件之前加载jQuery,但是如果我在jasmine.yml中包含jQuery,它不会在源文件之前加载:
jasmine.yml内容:
src_dir: "app/assets/javascripts"
src_files:
- "my_rails_plugin_source_includer.js"
spec_dir: spec/javascripts
asset_paths:
- "vendor/assets/javascripts"my_rails_plugin_source_includer.js需要我的源javascripts:
//= require my_jquery_dependent_script.js
//= require my_other_jquery_dependent_script.js我正在使用
bundle exec jasmine-headless-webkit --color --keep ./spec/javascripts/specs.js来运行我的测试。我收到错误消息,如下所示
ReferenceError: Can't find variable: jQuery
ReferenceError: Can't find variable: jQuery
Test ordering seed: --seed 1629如果我在my_rails_plugin_source_includer.js中显式地需要一个min.jeryjavascript文件(例如,jQuery -1.9.1-jquery),我的测试就会通过。但是,我不想这样做,因为我想要实际的Rails应用程序,而不是这个插件。关于如何在我的源文件之前要求jQuery,有什么建议吗?在我的规范或助手中要求它并不起作用,因为Jasmine似乎总是首先加载源文件(这当然是有意义的)。
发布于 2013-04-02 02:53:20
我能够通过执行以下操作来解决此问题:
//=需要../helpers/jquery-1.9.1.min //=需要../../../../app/assets/javascripts/application
其中app/assets/javascripts/application.js是我的插件的JavaScripts.
src_dir:"spec/javascripts/support/fixtures“src_files:- "source.js"
因此,依赖于jQuery的源JavaScripts预加载了jQuery,仅用于Jasmine测试。
发布于 2013-12-15 08:51:29
感谢for your answer, Fares,它让我深入了解了jasmine配置文件发生了什么。
对于如何将文件包含在jasmine页面的<head>标记中,有一个可预测的顺序。
首先,我的设置是:
rails 4.0.1
jasmine 1.3.2
jquery-rails 3.0.4 (which provides jquery-1.10.2)
这是我的spec/javascripts/support/jasmine.yml.我没有helpers,我不需要css文件来测试我的应用程序,我删除了所有的评论。
src_files:
- spec/javascripts/lib/jquery-1.10.2.js
- app/assets/javascripts/tools/dependency-parser.js
spec_dir: spec/javascripts
spec_files:
- '**/*[sS]pec.js'
我的jasmine页面的<head>按顺序包含以下内容:
jasmine core <link rel="shortcut icon" type="image/png" href="/__JASMINE_ROOT__/images/jasmine_favicon.png">
<link rel="stylesheet" href="/__jasmine__/jasmine.css" type="text/css" media="screen">
<script src="/__jasmine__/jasmine.js" type="text/javascript"></script>
<script src="/__jasmine__/jasmine-html.js" type="text/javascript"></script>
<script src="/__jasmine__/json2.js" type="text/javascript"></script>
src_files <script src="/spec/javascripts/lib/jquery-1.10.2.js" type="text/javascript"></script>
<script src="/app/assets/javascripts/tools/dependency-parser.js" type="text/javascript"></script>
helper_files <!-- I didn't have anything here -->
spec_files <script src="/__spec__/dependency-parser_spec.js" type="text/javascript"></script>
jasmine boot <script src="/__boot__/boot.js" type="text/javascript"></script>
我的应用程序使用app/assets/application.js中的资产管道、jquery-rails gem以及典型的includes
//=require jquery
//=require jquery-ujs
//=require tree .因为我使用的是jquery-rails gem,这意味着我实际上没有任何地方的jQuery JavaScript文件可以直接加载-如果它们来自任何地方,那么它们应该来自资产管道。由于某种原因,我似乎也不能包含app/assets/javascripts/application.js文件。事实证明这没问题;我只想测试我的自定义JavaScript,它依赖于jQuery。
因此,我只需下载我的应用程序使用(1.10.2)的jQuery版本,并将其放入:
spec/javascripts/lib/ <= I created this folder在那之后,一切都运行得很完美,因为我可以按照需要的顺序加载.js文件。这并不完美。我现在手动地在我的规范中保持我的jQuery版本与我使用的jquery-rails版本相同,但这对now...though来说是一件相当小的事情它回避了一个问题,“为什么人们把javascript文件打包到一个gem中?”没有其他web框架会做这种古怪的事情。
我还尝试使用jasmine 2.0.0.rc5 gem (撰写本文时的当前版本),因为它应该处理类似这样的资产管道问题,但它对我不起作用。
我还尝试跳到更复杂的东西,比如使用jasmine-jquery或jasminerice gem,但发现它们的两个实现都比我上面所做的更复杂。一旦我理解了配置文件是如何在我的特定情况下生成<head>标记的内容的,这就是一个相对简单的修复方法。
如果我觉得有必要的话,我可能会在jasmine 2.0.0发布时转移到它(它应该有更好的Rails 4支持),但我非常确定这个解决方案会工作得很好。
https://stackoverflow.com/questions/15747475
复制相似问题