rspec测试(使用guard自动测试和spork加速测试)配置

Gemfile文件添加rspec、guard和spork,之后执行bundle install命令

gem 'rb-readline'
group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug'

  #rspec
  gem 'rspec-rails'

  #guard
  gem 'guard-rspec'
  gem 'selenium-webdriver'
  gem 'capybara'

  #spork
  gem 'spork-rails'
  gem 'guard-spork'
  gem 'childprocess'
end

引入rspec到rails工程中执行:rails g rspec:install

root@jec:~/RubymineProjects/Brush# rails g rspec:install
      create  .rspec
      create  spec
      create  spec/spec_helper.rb
      create  spec/rails_helper.rb

 

 

之后会在工程添加spec文件夹,如下图所示:

rspec已经引入成功,接下来初始化Guard,这样guard才能和rspec一起使用,执行:bundle exec guard init rspec

root@jec:~/RubymineProjects/Brush# bundle exec guard init rspec
15:15:51 - INFO - Writing new Guardfile to /root/RubymineProjects/Brush/Guardfile
15:15:51 - INFO - rspec guard added to Guardfile, feel free to edit it

运行guard:bundle exec guard

root@jec:~/RubymineProjects/Brush# bundle exec guard
19:09:06 - INFO - Guard::RSpec is running
19:09:06 - INFO - Guard is now watching at '/root/RubymineProjects/Brush'
[1] guard(main)> 

接下来导入Spork的设置:bundle exec spork --bootstrap

root@jec:~/RubymineProjects/Brush# bundle exec spork --bootstrap
Using RSpec, Rails
Bootstrapping /root/RubymineProjects/Brush/spec/spec_helper.rb.
Done. Edit /root/RubymineProjects/Brush/spec/spec_helper.rb now with your favorite text editor and follow the instructions.

修改spec/spec_helper.rb的rspec设置文件,让所需的环境在一个预派生(prefork)代码块中加载,保证环境只被加载一次

Spork.prefork do
  # Loading more in this block will cause your tests to run faster. However,
  # if you change any configuration or code from libraries loaded here, you'll
  # need to restart spork for it take effect.
  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'
# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
# Checks for pending migrations before tests are run.
# If you are not using ActiveRecord, you can remove this line.
  ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
  RSpec.configure do |config|
# ## Mock Framework
#
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
#
# config.mock_with :mocha
# config.mock_with :flexmock
# config.mock_with :rr
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
    config.fixture_path = "#{::Rails.root}/spec/fixtures"
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
    config.use_transactional_fixtures = true
# If true, the base class of anonymous controllers will be inferred
# automatically. This will be the default behavior in future versions of
# rspec-rails.
    config.infer_base_class_for_anonymous_controllers = false
    # config.order = "random"
    config.include Capybara::DSL
  end
end

运行spork:bundle exec spork

#在启动spork之前,一定要先创建测试数据库,即执行rake db:create和rake db:migrate命令
root@jec:~/RubymineProjects/Brush# bundle exec spork
Using RSpec, Rails
Preloading Rails environment
Loading Spork.prefork block...
Spork is ready and listening on 8989!

 Guard和Spork协作,执行:bundle exec guard init spork

之后只要执行bundle exec guard就会自动启动spork服务器

root@jec:~/RubymineProjects/Brush# bundle exec guard init spork
19:21:28 - INFO - spork guard added to Guardfile, feel free to edit it

执行:bundle exec guard

root@jec:~/RubymineProjects/Brush# bundle exec guard
19:21:36 - INFO - Guard::RSpec is running
19:21:36 - INFO - Starting Spork for RSpec
Using RSpec, Rails
Preloading Rails environment
Loading Spork.prefork block...
Spork is ready and listening on 8989!
19:21:39 - INFO - Spork server for RSpec successfully started

19:21:39 - INFO - Guard is now watching at '/root/RubymineProjects/Brush'
[1] guard(main)> 

ok

posted on 2016-01-31 19:27  jec  阅读(581)  评论(0编辑  收藏  举报

导航