12

我想知道作为 Rails 3.1 应用程序的一部分进行JavaScript单元测试的最简单方法是什么。

我非常喜欢 Jasmine,它运行良好(尽管它需要一些技巧来获取.coffee文件)。

我对 Jasmine 的唯一问题是它在一个巨大的页面中运行所有测试示例,这是非常有问题的,因为它需要加载所有脚本。

我真正想要的是Jasmine + 多个文件中的多个测试套件(以便它生成多个 html 文件,包括规范文件)。

除此之外,我想在浏览器中运行测试(希望很容易),无头或在 JS 引擎中(如果可能的话)。

有什么建议吗?

4

5 回答 5

6

Teaspoon几乎可以满足您的需求。

我写了大部分内容,它基于我编写 javascript 规范和使用 Rails 3.1/coffeescript 的经验。你的问题包括一些让我想首先贡献它的东西。

编辑:

澄清一下,Teaspoon 支持定义多个套件,具有 rake 任务,支持使用 Selenium Webdriver 或 PhantomJS 作为驱动程序、Jasmine、Mocha 或 QUnit 测试框架,允许从命令行运行(例如bundle exec teaspoon spec/javascripts/my_spec.coffee),以及其他几个不错的功能。

于 2012-12-27T08:51:15.133 回答
3

在我工作的地方,我们想找到一个解决方案来涵盖您所提到的内容。

我们检查了以下框架:

我们终于选择了茶匙。它需要最少的设置,并且很容易与我们的 CI 集成。它提供套件、资产管道支持(这样您就可以在没有 hack 的情况下测试 .coffee)并且它可以在 RAILS_ENV=test 中运行

于 2013-07-11T21:08:29.790 回答
2

您可能想尝试evergreen(https://github.com/jnicklas/evergreen)。它允许您使用jasmine无头浏览器或 JS 引擎内部的浏览器编写测试用例并运行测试。

您可以在自述文件部分https://github.com/jnicklas/evergreen#readme找到此 gem 的用法

不幸的是,evergreen 还不能很好地与新的 rails 3.1 功能配合使用(在做出这个答案时)。所以我尝试创建一些猴子补丁来让它发挥良好。

# config/evergreen.rb
unless defined?(CONFIG_EVERGREEN_LOADED)
  CONFIG_EVERGREEN_LOADED = true

  require ::File.expand_path('../environment',  __FILE__)

  unless "".respond_to?(:each) # this monkey patch make the old capybara play well with ruby 1.9.2
    String.class_eval do
      def each &block
        self.lines &block
      end
    end
  end

  module Evergreen

    class << self
      def application_with_additions(suite)
        app = application_without_additions(suite)

        app.map "/assets" do
          assets = Rails.application.config.assets
          if assets.enabled
            require 'sprockets'
            sprockets = Sprockets::Environment.new(suite.root)
            sprockets.static_root = File.join(suite.root, 'public', assets.prefix)
            sprockets.paths.concat assets.paths
            sprockets.js_compressor = nil
            run sprockets
          end
        end
        app
      end

      alias_method :application_without_additions, :application
      alias_method :application, :application_with_additions
    end

end
于 2011-06-09T11:59:55.093 回答
0

也许尝试jasmine-headless-webkit(https://github.com/johnbintz/jasmine-headless-webkit)。这提供了在无头 WebKit 浏览器中运行 Jasmine 规范的能力。

于 2011-06-09T01:14:10.527 回答
0

到目前为止,我还没有找到一个合理的答案。但是茉莉花的第 24 期问题可能是接近答案的问题,如果它会实施的话

于 2012-06-29T00:06:56.627 回答