ruby-on-rails Rails 3.1中的JavaScript单元测试

wydwbb8l  于 2023-02-26  发布在  Ruby
关注(0)|答案(5)|浏览(141)

我想知道作为Rails 3.1应用程序的一部分,进行JavaScriptUnit测试的最简单方法是什么。
我非常喜欢Jasmine,它工作得相当不错(尽管它要拿起.coffee文件需要一些技巧)。
Jasmine的唯一问题是它在一个巨大的页面中运行所有的测试示例,这是非常有问题的,因为它需要加载所有的脚本。
我真正想要的是Jasmine+多个文件中的多个测试套件(这样它就可以生成多个html文件,包括规范文件)。
除此之外,我还想在浏览器中、无头或JS引擎中(如果可能)运行测试(希望很容易)。
有什么建议吗?

utugiqy6

utugiqy61#

Teaspoon做了很多您想要的事情。
大部分是我写的,它是基于我写javascript规范和使用Rails 3.1/coffeescript的经验,你的问题包括了一些让我想在第一时间贡献它的东西。

    • 编辑:**

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

nkcskrwz

nkcskrwz2#

在我工作的地方,我们希望找到一个解决方案,以涵盖几乎你所提到的。
我们研究了以下框架:

我们最终选择了teaspoon。它需要最少的设置,并且很容易与CI集成。它提供套件、资产管道支持(以便您可以测试.coffee而不需要黑客攻击),并且可以在RAILS_ENV=test中运行

2w2cym1i

2w2cym1i3#

你可能想试试evergreen(https://github.com/jnicklas/evergreen),它允许你用jasmine编写测试用例,并在浏览器中、无头或JS引擎中运行测试。
您可以在www.example.com的自述文件部分找到此gem的用法https://github.com/jnicklas/evergreen#readme
不幸的是,万年青在rails3.1的新特性上还不能很好的运行(在这个答案被给出的时候),所以我试着创建一些monkey补丁来让它运行的很好。

# 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
xmjla07d

xmjla07d4#

到目前为止,我还没有找到一个合理的答案,但是issue #24 of jasminerice可能是最接近答案的,如果它将被实现的话

jaxagkaj

jaxagkaj5#

也许可以试试jasmine-headless-webkit,它提供了在无头Webkit浏览器中运行Jasmine规范的能力。

相关问题