如何在 Jasmine-Rails 中使用 CoffeeScript 规范

Posted

技术标签:

【中文标题】如何在 Jasmine-Rails 中使用 CoffeeScript 规范【英文标题】:How to use CoffeeScript specs with Jasmine-Rails 【发布时间】:2013-06-14 22:34:48 【问题描述】:

我正在运行带有 Ruby 版本 2.0.0-p195 的 Rails 3.2.13。我正在使用启用资产管道的 Jasmine-Rails gem 版本 0.4.5。我想用 CoffeeScript 编写我的规范,但我无法弄清楚如何命名文件并配置 jasmine.yml 以便正确提取和解析规范。

这是我的 jasmine.yml 文件的内容:

src_dir: "app/assets/javascripts"

src_files:
 - "application.js,coffee"

spec_dir: spec/javascripts

helpers:
  - "helpers/**/*.js,coffee"

spec_files:
  - "**/*[Ss]pec.js,coffee"

我尝试将文件命名为 my_spec.js.coffee。那是行不通的。当然 my_spec.js 命名约定工作得很好。我还尝试弄乱 jasmine.yml 中的 spec_files 值,但没有成功。

在此先感谢任何遇到过类似问题、想通了并且可以帮助我编写稍微不那么乏味的规范的人。

【问题讨论】:

请don't use signatures or taglines in your posts。 【参考方案1】:

只是一件小事。您的文件命名约定使用两个扩展名:my_spec.js.coffee

jasmine.yml 文件只需要“spec”,然后是“coffee”。这两个扩展与此模式不匹配。

spec_files:
  - "**/*[Ss]pec.js,coffee"

Aire Shaw 的出色回答使用了文件名 my_spec.coffee,它与 jasmine.yml 文件的预期相符。

如果您希望使用 my_spec.js.coffee 格式的文件名(以及 .js 和 .coffee),您可以将 jasmine.yml 文件更改为:

spec_files:
  - "**/*[Ss]pec.js,coffee,js.coffee"

我的咖啡脚本使用你的文件名约定,这对我有用。

【讨论】:

【参考方案2】:

来自Jasmine-Rails's Github homepage:

jasmine-rails gem 完全支持 Rails 资产管道,这意味着您可以:

对源文件或测试文件使用 coffee_script 或其他 Javascript 预编译器 使用 sprockets 指令控制依赖文件的包含/排除 利用资产管道搜索路径来包含来自各种来源/宝石的资产

如果您选择使用资产管道支持,许多 jasmine.yml 配置就变得不必要了,您可以依靠 Rails 资产管道来完成控制哪些文件包含在其中的艰苦工作你的测试套件。

# minimalist jasmine.yml configuration when leveraging asset pipeline
spec_files:
  - "**/*[Ss]pec.js,coffee"

这定义了规范文件的名称模式。也就是说,零个或多个字符,后跟Specspec,并带有jscoffee 扩展名。

将 Jasmine-Rails 路由配置添加到 config/routes.rb

mount JasmineRails::Engine => "/specs" if defined?(JasmineRails)

现在您可以在 spec/javascripts/my_spec.coffee 中编写一个规范来测试 Foo。

describe 'Foo', ->
  it 'does something', ->
    expect(1 + 1).toBe(2)

您的 RoR 项目结构部分应该是这样的:

RailsApp/
|---app/
|---config/
|   |---routes.rb
|---...
|---spec/
    |---javascripts/
        |---my_spec.coffee
        |---support/
            |---jasmine.yml

您可以使用以下方法测试规格:

bundle exec rake spec:javascript

或者您可以启动 rails 服务器并检查 Jasmine-Rails (/specs) 的路径。

【讨论】:

嗯,看来您没有仔细阅读我的问题。我已将其设置并使用 javascript 文件作为规范文件。我只是无法让它与 CoffeeScript 文件一起使用。 .coffee 文件被拉入并引发错误(仅具有 .coffee 扩展名,除了该文件与具有 .js 扩展名的工作文件相同)并且 .js.coffee 文件根本没有被拉入测试. @RebekahWaterbury 我知道你想编写咖啡脚本规范,我提供的是我设法在咖啡脚本中编写 Jasmine 规范的方法。我在我的服务器上进行了测试,发现它可以愉快地接受和运行咖啡脚本规范。 嗯,这与我的设置完全相同。也许它在我的 Gem 设置中。我的 Gemfile 的资产块中有 gem 'coffee-rails'。您是否正在使用该宝石和/或将其分组在该位置。我将尝试将其移至非分组区域。我会看看情况如何。 @RebekahWaterbury 我正在使用默认的 Gemfile,coffee-rails 位于 :assets 组中。 是的,我发现了我的错误。这是一个概念性问题,因为我以前没有使用过 CoffeeScript。该规范正在被引入,它不能与标准 javascript 一起使用。我错误地理解 Javascript 可以在 CoffeeScript 文件中使用而无需任何调整。我错了。感谢您的关注并帮助我度过难关。我会赞成你的回答,因为它让我到了正确的地方,并且假设有人正确使用 CoffeeScript,它会为他们工作;)

以上是关于如何在 Jasmine-Rails 中使用 CoffeeScript 规范的主要内容,如果未能解决你的问题,请参考以下文章

计算方法B_高斯消去

如何在 rails3.1 中使用 ajax?

从 Mysql 迁移到 Cassandra

如何执行MIPSEB-LE ECOFF可执行文件?

用PHP创建短ID,比如Youtube或TinyURL

.htaccess Rewrite apache重写和配置