首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置Rails角度项目来测试JS?

如何设置Rails角度项目来测试JS?
EN

Stack Overflow用户
提问于 2013-04-23 01:27:44
回答 4查看 5.6K关注 0票数 31

我试图设置我的Rails角度项目,以提供JS测试。我几乎所有在谷歌上找到的东西都试过了:

但我都失败了。我正在寻找一种以最无痛的方式运行单元和e2e测试的方法(它可以在卫队或Karma中运行,我不在乎,但它必须在后台自动运行)。

有没有人有一些很好的文章,有一个很好的例子,如何实现这一点?在我的研究中,我发现了,但是IMHO是一个如何不这样做的例子。

我的实际Gemfile

代码语言:javascript
复制
source 'https://rubygems.org'

# Use Ruby 1.9.3 instead default Heroku's 1.9.2
# for development I suggest https://gist.github.com/1688857
ruby '1.9.3'

gem 'rails', '3.2.12'

# Use PostgreSQL, which is quite awesome, fast and easy
gem 'pg'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails', '~> 3.2.3'
  gem 'bootstrap-sass', '~> 2.3.1'

  # I heard that you like Compass
  gem 'compass'

  # Angular.js
  gem 'angularjs-rails'
  gem 'angularjs-rails-resource'
  gem 'angular-ui-rails'

  # Assets should be minified before production
  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

# Serve static pages like a boss
gem 'high_voltage'

# Some user management will be nice
gem 'devise' # User management
# gem 'cancan' # And they privileges

# To use Jbuilder templates for JSON
gem 'jbuilder'

# Be fast and deadly as Puma
#gem 'puma'

# We need also some administration panel, don't we?
gem 'rails_admin'

# Some helpers
gem 'andand'

group :development do
  # IRb is ugly. Use Pry for the God's sake
  gem 'pry-rails'

  # Deploy with Capistrano
  # gem 'capistrano'
  # or Vlad the Deployer
  # gem 'vlad'

  # Why bother yourself with rerunning tests? Use Guard
  gem 'guard'
  gem 'guard-rspec'
  gem 'guard-spork'
  gem 'guard-livereload'
  gem 'guard-jasmine'
  gem 'rb-fsevent', require: false
  gem 'rb-inotify', require: false

  # Who like ugly error pages? We don't.
  gem 'better_errors'
  gem 'binding_of_caller'

  # Prettier documentation
  gem 'yard'
end

group :development, :test do
  # Use RSpec for testing
  gem 'rspec-rails', '~> 2.12.0'

  # Test JS using Jasmine
  gem 'jasmine'
  gem 'jasmine-headless-webkit'

  # Some DB table generator
  gem 'factory_girl_rails', '~> 4.1.0'

  # And fake data generator
  gem 'ffaker'
end

group :test do
  # Some Gherkins will be also good (to vodka of course)
  gem 'turnip', '~> 1.1.0'

  # Aww, an of course some web browser will be also apprised
  gem 'capybara', '~> 2.0.1'

  # Clean DB after tests
  gem 'database_cleaner'

  # Some nice matchers
  gem 'shoulda-matchers'

  # Extend your mocks
  gem 'bourne', '~> 1.2.1'

  # Coverage reports will be nice
  gem 'simplecov', require: false
end

PS: --如果我能以一种简单的方式创建覆盖率报告,那就太好了。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-08 14:53:01

您可以使用茶匙,它运行您最喜欢的测试套件(默认为茉莉花),并且它们有一个wiki可以与角集成。茶匙与资产管道集成,因此您可以将所有的角宝石抛入其中,并在生成的spec_helper.js中要求它们。

另一件很酷的事情是:他们也有一个护卫插件可用。

票数 6
EN

Stack Overflow用户

发布于 2013-06-14 13:35:13

我感觉到了你的痛苦,我花了一些尝试和错误来让我的Rails应用程序运行所有的测试。最后,我使用Guard对规范、验收和javascripts进行了持续测试。这是我劳动的成果。

这是您需要包含的Gemfile片段。它具有守卫茉莉Rspec萝卜所需的Gems。这个设置将与核磁共振和JRuby一起工作,我们对两者都进行了测试。

代码语言:javascript
复制
group :test, :development do
  # Guard
  gem 'guard-jasmine'
  gem "guard-bundler", ">= 1.0.0"
  gem "guard-rails", ">= 0.4.0"
  gem "guard-rspec", ">= 2.5.2"
  gem "rb-inotify", ">= 0.9.0", :require => false
  gem "rb-fsevent", ">= 0.9.3", :require => false
  gem "rb-fchange", ">= 0.0.6", :require => false

  # Rspec
  gem "rspec-rails", '~> 2.12.2'

  # Jasmine
  gem "jasmine", '~> 1.3.1'
  gem "jasminerice"
end

group :test do
  # Turnip
  gem "turnip", '~> 1.1.0'
  gem "capybara", '~> 2.0.3'
end

这是监视Rspec、Turnip和Jasmine以触发测试的完整Guardfile:

代码语言:javascript
复制
guard 'rspec' do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { "spec" }

  # Rails 
  watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^app/(.*)(\.erb|\.haml)$})                 { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
  watch(%r{^spec/support/(.+)\.rb$})                  { "spec" }
  watch('config/routes.rb')                           { "spec/routing" }
  watch('app/controllers/application_controller.rb')  { "spec/controllers" }

  # Turnip features and steps
  watch(%r{^spec/acceptance/(.+)\.feature$})
  watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$})   { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
end

guard :jasmine do
  watch(%r{spec/javascripts/spec\.(js\.coffee|js|coffee)$}) { 'spec/javascripts' }
  watch(%r{spec/javascripts/.+_spec\.(js\.coffee|js|coffee)$})
  watch(%r{spec/javascripts/fixtures/.+$})
  watch(%r{app/assets/javascripts/(.+?)\.(js\.coffee|js|coffee)(?:\.\w+)*$}) { |m| "spec/javascripts/#{ m[1] }_spec.#{ m[2] }" }
end

现在事情变得有点棘手。为了让茉莉花能够正确地加载AngularJS进行测试,我将角质层.下载到了spec/javascripts/support/angt-mocks.js目录。规范助手和jasmine使用它来运行AnguljarJS规范。

对于spec/ javascript /spec_helper.js.cof,请将其指向Rails应用程序javascript、角-mocks.js和所有javascript规范:

代码语言:javascript
复制
#=require ../../app/assets/javascripts/application
#=require ./support/angular-mocks
#=require_tree ./

对于Jasmine,spec/ javascript /support/jasmine.yml,配置将需要指向Rails应用程序javascript和角-mocks.js。以下是我们使用的内容,但为了简洁起见,删除了注释:

代码语言:javascript
复制
src_files:
  - assets/application.js
  - spec/javascripts/support/angular-mocks.js

stylesheets:
  - stylesheets/**/*.css

helpers:
  - helpers/**/*.js

spec_files:
  - '**/*[sS]pec.js'

src_dir:

spec_dir: spec/javascripts

所有设置就绪后,您只需运行bundle exec guard,所有测试都将运行,并由开发更改触发。

票数 6
EN

Stack Overflow用户

发布于 2014-05-19 21:42:02

我写了一篇博客文章,介绍了使用默认的Jasmine在Rails应用程序上设置AngularJS单元测试的一个非常简单的方法。为了使事情顺利进行,只需进行一个小的代码更改,茉莉花团队已经接受了这一点。

http://pivotallabs.com/unit-testing-angularjs-using-jasmine/

简而言之:

在Gemfile中添加茉莉花和angularjs-rails

代码语言:javascript
复制
gem "angularjs-rails"
gem "jasmine", github: "pivotal/jasmine-gem"

安装宝石并运行茉莉花生成器

代码语言:javascript
复制
$ bundle install
$ rails g jasmine:install

在应用程序代码的其余部分之前,向application.js添加角

代码语言:javascript
复制
//= require angular
//= require_tree .

创建一个名为./spec/javascripts/helpers/angular_helpers.js的文件并添加这一行

代码语言:javascript
复制
//= require angular-mocks

现在,您可以在您的AngularJS目录中包含app/assets实现文件,并编写使用所提供的模拟的测试。当您升级angularjs-rails gem时,您将同时获得angular.jsangular-mocks.js的新版本。

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

https://stackoverflow.com/questions/16159395

复制
相关文章

相似问题

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