打算以后使用rspec 就行测试开发,由于第一次在项目中使用,所以,记录再次,便于以后查询
本文的记录参考了开源软件 angle-nest 和 Ruby-China源码
- 安装gem
- group :development, :testdo
- gem 'cucumber-rails', :require => false
- gem 'database_cleaner'
- gem 'factory_girl'
- gem 'factory_girl_rails'
- gem 'rspec-rails'
- gem 'capybara'
- gem 'delorean'
- end
group :development, :test do gem 'cucumber-rails', :require => false gem 'database_cleaner' gem 'factory_girl' gem 'factory_girl_rails' gem 'rspec-rails' gem 'capybara' gem 'delorean' end
- install
- rails generate rspec:install
rails generate rspec:install
- 运行测试
- rake spec
rake spec
- 修改helper文件
- config.mock_with :rspec
- config.use_transactional_fixtures = false
- config.include Delorean
- DatabaseCleaner.strategy = :truncation
- config.before do
- DatabaseCleaner.clean
- end
config.mock_with :rspec config.use_transactional_fixtures = false config.include Delorean DatabaseCleaner.strategy = :truncation config.before do DatabaseCleaner.clean end
- 安装watchr
- gem 'watchr'
gem 'watchr'
- 新建.watchr文件
- def run_spec(file)
- unlessFile.exist?(file)
- puts "#{file} does not exist"
- return
- end
- puts "Running #{file}"
- system "bundle exec rspec #{file}"
- puts
- end
- watch("spec/.*/*_spec.rb") do |match|
- run_spec match[0]
- end
- watch("app/(.*/.*).rb") do |match|
- run_spec %{spec/#{match[1]}_spec.rb}
- end
def run_spec(file) unless File.exist?(file) puts "#{file} does not exist" return end puts "Running #{file}" system "bundle exec rspec #{file}" puts end watch("spec/.*/*_spec.rb") do |match| run_spec match[0] end watch("app/(.*/.*).rb") do |match| run_spec %{spec/#{match[1]}_spec.rb} end
解析
- 一旦spec/目录下有以_spec.rb结尾的文件发生了改变,watchr便会自动运行run_spec 方法来对该文件进行测试。
- 一旦有app/目录下有.rb结尾的文件发生了改变,立即调用run_spec 方法来执行该文件所对应的spec测试文件。
- run_file 通过文件名来检查spec文件是否存在, 然后来运行该spec (调用 system)
一旦spec/目录下有以_spec.rb结尾的文件发生了改变,watchr便会自动运行run_spec 方法来对该文件进行测试。 一旦有app/目录下有.rb结尾的文件发生了改变,立即调用run_spec 方法来执行该文件所对应的spec测试文件。 run_file 通过文件名来检查spec文件是否存在, 然后来运行该spec (调用 system)
- 运行
- watchr .watchr
watchr .watchr
- 增加spark提升速度
- gem 'spork', '1.0.0rc3'
gem 'spork', '1.0.0rc3'
- 运行
- spork --bootstrap
spork --bootstrap
- 修改spec_helper.rb
第一,上传 rubygems,因为我们已经有bundler了
修改spec_helper.rb文件如下
- require 'spork'
- #uncomment the following line to use spork with the debugger
- #require 'spork/ext/ruby-debug'
- Spork.prefork do
- ENV["RAILS_ENV"] ||= 'test'
- require File.expand_path("../../config/environment", __FILE__)
- require 'rspec/rails'
- require 'rspec/autorun'
- # 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}
- RSpec.configure do |config|
- config.mock_with :rspec
- config.use_transactional_fixtures = false
- config.include Delorean
- DatabaseCleaner.strategy = :truncation
- config.before do
- DatabaseCleaner.clean
- end
- end
- end
- Spork.each_run do
- # This code will be run each time you run your specs.
- end
require 'spork' #uncomment the following line to use spork with the debugger #require 'spork/ext/ruby-debug' Spork.prefork do ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'rspec/autorun' # 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} RSpec.configure do |config| config.mock_with :rspec config.use_transactional_fixtures = false config.include Delorean DatabaseCleaner.strategy = :truncation config.before do DatabaseCleaner.clean end end end Spork.each_run do # This code will be run each time you run your specs. end
- 修改.rspec文件,增加如下代码
- --drb
--drb
- 运行spork
- spork
spork
- 在运行 watchr .wtachr 速度加快了
- 清除test环境下的缓存,编辑
config/environments/test.rb
- config.cache_classes = false