zoukankan      html  css  js  c++  java
  • RSpec + Spork + Autotest 给Rails 3添加快速自动化测试

    1、新建工程时不使用test-unit

    rails new myapp --skip-test-unit
    

    2、添加gem

    修改Gemfile

    group :development, :test do
      gem 'rspec-rails'	#会自动引用RSpec
      gem 'spork'		#引入Spork
      gem "autotest-rails"	#与ZenTest一起实现自动化测试
      gem "ZenTest"
    end
    


    安装

    bundle install
    

    3、配置rspec

    rails generate rspec:install
    

    会生成以下文件:
    .rspec rspec配置。
    spec/ 所有测试都在这个目录。
    spec/spec_helper.rb

    此时即可”bundle exec rspec spec/”或“rake”来执行RSpec测试。

    4、Spork加速原理

    RSpec默认每执行一次都要加载一次工程环境初始化一些数据,这要耗费很长时间。Sprok启动时会自动加载工程环境,然后生成几个fork分支,以DRb形式可供RSpec调用。所有在RSpec执行时就不必再重新加载工程环境。

    5、安装Spork

    spork --bootstrap
    

    输出

    Using RSpec
    Bootstrapping /Users/peter/dev/rails/myapp/spec/spec_helper.rb.
    Done. Edit /Users/peter/dev/rails/myapp/spec/spec_helper.rb now with your favorite text editor and follow the instructions.
    

    上面做的就是修改spec/spec_helper.rb文件,在其头部添加了两段方法。Spork.prefork(只在启动时执行一次)和Spork.each_run(每次被RSpec调用时均被执行)。

    6、修改RSpec配置,实现RSpec与Sprok交互

    继续修改spec/spec_helper.rb,修改后大概如下:

    require 'spork'
    
    Spork.prefork do
      ENV["RAILS_ENV"] ||= 'test'
      require File.expand_path("../../config/environment", __FILE__)
      require 'rspec/rails'
      require 'rspec/autorun'
    
      Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
    
      RSpec.configure do |config|
        config.mock_with :rspec
        config.fixture_path = "#{::Rails.root}/spec/fixtures"
        config.use_transactional_fixtures = true
        config.infer_base_class_for_anonymous_controllers = false
      end
    
    end
    
    Spork.each_run do
      load "#{Rails.root}/config/routes.rb"
      Dir["#{Rails.root}/app/**/*.rb"].each { |f| load f }
    end
    

    7、告诉RSpec我们使用的Spork

    修改”.rspec”文件,在其中添加–drb,修改后”.rspec”的如下:

    --colour
    --drb
    

    8、此时RSpec与Spork即可完美结合了

    启动Spork方法

    Spork
    

    执行RSpec方法

    bundle exec rspec spec/
    

    此时会发现RSpec执行时间明显缩短了。但如果通过执行”rake”来启动RSpec,仍然会很慢,这是因为rake启动时会加载工程环境,为所有tasks做准备。

    9、添加Autotest自动执行测试

    启动Autotest

    bundle exec autotest
    

    Autotest就会自动启动,并监听文件变化,一旦改变,会立即执行改变部分相关的测试。
    添加Autotest是最简单的,这是因为RSpec内部已经添加了对Autotest的一些支持,也是Rspec Rails推荐的做法。
    简单也有一些问题,如Autotest自定义性不强,不够灵活。如果你追求自定义那就用Guard吧。

    10、一个陷阱

    此时当你修改app/models/person.rb时,可能并不会自动执行RSpec测试,这是因为Rails 的test环境默认对class做了缓存。
    修改“config/environments/test.rb”

    #config/environments/test.rb
    #config.cache_classes = true #change this line to
    config.cache_classes = false
    

    参考链接:

    autotest-rails: https://github.com/seattlerb/autotest-rails
    rspec-rails: https://github.com/rspec/rspec-rails
    Guard: https://github.com/guard/guard

    Spork + Rails 3 + RSpec + Autotest + Growl实现Mac下快速自动化测试并Growl通知测试结果
    http://mikbe.tk/2011/02/10/blazingly-fast-tests/
    Spork + Rails 3 + RSpec + Watchr测试
    http://www.rubyinside.com/how-to-rails-3-and-rspec-2-4336.html
    Spork + Rails 3+ Cucumber + RSpec
    http://chrismdp.github.com/2010/11/getting-spork-working-now-on-rails-3-rspec-2-and-cucumber/

  • 相关阅读:
    PHP数组、函数
    PHP 基本内容
    Swift基础--tableview练习
    iOS 协议delegate分六步
    UI09_UITableView 使用 单例
    css清除浮动float的三种方法总结,为什么清浮动?浮动会有那些影响?一起来$('.float')
    CSS 如何使DIV层水平居中
    HTML转义字符大全
    jQuery选择器总结
    jQuery 学习笔记_01
  • 原文地址:https://www.cnblogs.com/qinyan20/p/3643211.html
Copyright © 2011-2022 走看看