感谢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 文件来测试我的特定应用程序,并且我删除了所有cmets。
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>
我的应用使用资产管道、
jquery-rails gem,以及
app/assets/application.js 中的典型包含:
//=require jquery
//=require jquery-ujs
//=require tree .
因为我使用的是jquery-rails gem,这意味着我实际上没有任何地方可以直接加载 jQuery JavaScript 文件——如果它们来自任何地方,它们应该来自资产管道。由于某种原因,我似乎也无法包含app/assets/javascripts/application.js 文件。事实证明这没问题。我只想测试我的自定义 JavaScript,它依赖于 jQuery。
所以,我只是下载了我的应用程序使用的 jQuery 版本(1.10.2),并将其放入:
spec/javascripts/lib/ <= I created this folder
在那之后一切都运行良好,因为我可以按我需要的顺序加载我的.js 文件。这并不完美。我现在手动让我的 jQuery 版本在我的规范中与我使用的 jquery-rails 的任何版本相同,但现在这是一件相当小的事情......虽然它引出了一个问题,“为什么人们要打包javascript 文件到 gem 中?” 没有其他 Web 框架可以做这种古怪的事情。
我还尝试使用 jasmine 2.0.0.rc5 gem(撰写本文时的当前版本),因为它本应处理此类资产管道问题,但它对我不起作用。
我还尝试跳到更复杂的东西,例如使用 jasmine-jquery 或 jasminerice gems,但发现它们的两个实现都是我上面所做的更复杂的版本。一旦我了解了配置文件如何在我的特定情况下生成 <head> 标记的内容,这是一个相对简单的修复。
如果我觉得有必要,我可能会在它发布后转到jasmine 2.0.0(据说它有更好的 Rails 4 支持),但我很确定这个解决方案会很好地工作。