首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在源文件之前加载jQuery on Jasmine on Rails 3.1插件

在源文件之前加载jQuery on Jasmine on Rails 3.1插件
EN

Stack Overflow用户
提问于 2013-04-02 00:42:17
回答 2查看 1.7K关注 0票数 3

我正在开发一个Rails插件,该插件将包含在从CDN加载jQuery的Rails应用程序中。然而,我在我的插件中运行Jasmine测试时遇到了问题。我需要在app/assets/ javascript中的源javascript文件之前加载jQuery,但是如果我在jasmine.yml中包含jQuery,它不会在源文件之前加载:

jasmine.yml内容:

代码语言:javascript
复制
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:

代码语言:javascript
复制
//= require my_jquery_dependent_script.js
//= require my_other_jquery_dependent_script.js

我正在使用

代码语言:javascript
复制
bundle exec jasmine-headless-webkit --color --keep ./spec/javascripts/specs.js

来运行我的测试。我收到错误消息,如下所示

代码语言:javascript
复制
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似乎总是首先加载源文件(这当然是有意义的)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-02 02:53:20

我能够通过执行以下操作来解决此问题:

  1. the official jQuery source下载jquery-1.9.1.min.js并将其存储在我的spec/javascripts/support/helpers中,并在我的spec/javascripts/support/fixtures文件夹(可以是任意文件夹)中创建一个source.js文件,该文件包含以下内容:

//=需要../helpers/jquery-1.9.1.min //=需要../../../../app/assets/javascripts/application

其中app/assets/javascripts/application.js是我的插件的JavaScripts.

  • Editing我的jasmine.yml文件使用以下来源的清单:

src_dir:"spec/javascripts/support/fixtures“src_files:- "source.js"

因此,依赖于jQuery的源JavaScripts预加载了jQuery,仅用于Jasmine测试。

票数 3
EN

Stack Overflow用户

发布于 2013-12-15 08:51:29

感谢for your answer, Fares,它让我深入了解了jasmine配置文件发生了什么。

对于如何将文件包含在jasmine页面的<head>标记中,有一个可预测的顺序。

首先,我的设置是:

代码语言:javascript
复制
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文件来测试我的应用程序,我删除了所有的评论。

代码语言:javascript
复制
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>按顺序包含以下内容:

代码语言:javascript
复制
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

代码语言:javascript
复制
//=require jquery
//=require jquery-ujs
//=require tree .

因为我使用的是jquery-rails gem,这意味着我实际上没有任何地方的jQuery JavaScript文件可以直接加载-如果它们来自任何地方,那么它们应该来自资产管道。由于某种原因,我似乎也不能包含app/assets/javascripts/application.js文件。事实证明这没问题;我只想测试我的自定义JavaScript,它依赖于jQuery。

因此,我只需下载我的应用程序使用(1.10.2)的jQuery版本,并将其放入:

代码语言:javascript
复制
spec/javascripts/lib/   <= I created this folder

在那之后,一切都运行得很完美,因为我可以按照需要的顺序加载.js文件。这并不完美。我现在手动地在我的规范中保持我的jQuery版本与我使用的jquery-rails版本相同,但这对now...though来说是一件相当小的事情它回避了一个问题,“为什么人们把javascript文件打包到一个gem中?”没有其他web框架会做这种古怪的事情。

我还尝试使用jasmine 2.0.0.rc5 gem (撰写本文时的当前版本),因为它应该处理类似这样的资产管道问题,但它对我不起作用。

我还尝试跳到更复杂的东西,比如使用jasmine-jqueryjasminerice gem,但发现它们的两个实现都比我上面所做的更复杂。一旦我理解了配置文件是如何在我的特定情况下生成<head>标记的内容的,这就是一个相对简单的修复方法。

如果我觉得有必要的话,我可能会在jasmine 2.0.0发布时转移到它(它应该有更好的Rails 4支持),但我非常确定这个解决方案会工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15747475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档