Created
September 1, 2011 15:48
-
-
Save Bazai/1186463 to your computer and use it in GitHub Desktop.
Настройка Spork для ускорения Ruby on Rails - RSpec - Cucumber проекта
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Речь идет о Rails 3.1.0 проекте | |
В Gemfile добавляем все так, как написано в указанном ниже примере Gemfile | |
Версия Spork не менее 0.9.0.rc9 | |
Делаем: | |
bundle install | |
Делаем все необходимые действия для установки RSpec и Cucumber | |
Корректируем файлы по указанным ниже примерам: | |
/spec/spec_helper.rb | |
/features/support/env.rb | |
Запускаем Spork с помощью: | |
bundle exec spork cucumber | |
Далее непосредственно тесты запускаем командой: | |
cuсumber --drb /feature/name_of.feature | |
Наслаждаемся супер скоростным запуском и прогоном тестов | |
Дополнение, если запуск Cucumber тестов отбирает ненужную кучу времени. | |
Есть замечательный кусок кода в блоке /features/support/env.rb | |
Spork.prefork do | |
# Раскомментировать это если нужно запустить трейсер, который показывает в милисекундах | |
# какие подгружаются файлы. Необходимо включить в require блок те файлы, которые загружаются | |
# более 100 мс. | |
# module Kernel | |
# def require_with_trace(*args) | |
# start = Time.now.to_f | |
# @indent ||= 0 | |
# @indent += 2 | |
# require_without_trace(*args) | |
# @indent -= 2 | |
# Kernel::puts "#{' '*@indent}#{((Time.now.to_f - start)*1000).to_i} #{args[0]}" | |
# end | |
# alias_method_chain :require, :trace | |
# end | |
Пользоваться этим так, как указано в комментарии. То есть, после того, как мы запускаем cucumber сначала он показывает профайлер информацию вида: | |
111 treetop/runtime | |
39 mail/parsers/rfc2822_obsolete | |
3 treetop/runtime | |
86 mail/parsers/rfc2822 | |
.... | |
754 mail | |
45 action_mailer/tmail_compat | |
2 abstract_controller/collector | |
0 active_support/core_ext/hash/reverse_merge | |
0 active_support/core_ext/array/extract_options | |
... | |
Перед каждым подгружаемым файлом указано, сколько время в милисекундах заняла подгрузка определенного файла. Если это время более 100 мс, нужно добавить в Spork.prefork блок подгрузку этого файла. То есть, на данном примере стоит добавить: | |
require 'treetop/runtime' | |
require 'mail' | |
И у нас получится СУПЕР-МЕГА-СКОРОСТНОЙ запуск тестов, и отключаем трейс блок в prefork. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Речь идет о Rails 3.1.0 проекте | |
В Gemfile добавляем все так, как написано в указанном ниже примере Gemfile | |
Версия Spork не менее 0.9.0.rc9 | |
Делаем: | |
bundle install | |
Делаем все необходимые действия для установки RSpec и Cucumber | |
Корректируем файлы по указанным ниже примерам: | |
/spec/spec_helper.rb | |
/features/support/env.rb | |
Запускаем Spork с помощью: | |
bundle exec spork cucumber | |
Далее непосредственно тесты запускаем командой: | |
cuсumber --drb /feature/name_of.feature | |
Наслаждаемся супер скоростным запуском и прогоном тестов | |
Дополнение, если запуск Cucumber тестов отбирает ненужную кучу времени. | |
Есть замечательный кусок кода в блоке /features/support/env.rb | |
Spork.prefork do | |
# Раскомментировать это если нужно запустить трейсер, который показывает в милисекундах | |
# какие подгружаются файлы. Необходимо включить в require блок те файлы, которые загружаются | |
# более 100 мс. | |
# module Kernel | |
# def require_with_trace(*args) | |
# start = Time.now.to_f | |
# @indent ||= 0 | |
# @indent += 2 | |
# require_without_trace(*args) | |
# @indent -= 2 | |
# Kernel::puts "#{' '*@indent}#{((Time.now.to_f - start)*1000).to_i} #{args[0]}" | |
# end | |
# alias_method_chain :require, :trace | |
# end | |
После комментирования-разкомментирования обязательно перезапустить Spork | |
Пользоваться этим так, как указано в комментарии. То есть, после того, как мы запускаем cucumber сначала он показывает профайлер информацию вида: | |
111 treetop/runtime | |
39 mail/parsers/rfc2822_obsolete | |
3 treetop/runtime | |
86 mail/parsers/rfc2822 | |
.... | |
754 mail | |
45 action_mailer/tmail_compat | |
2 abstract_controller/collector | |
0 active_support/core_ext/hash/reverse_merge | |
0 active_support/core_ext/array/extract_options | |
... | |
Перед каждым подгружаемым файлом указано, сколько время в милисекундах заняла подгрузка определенного файла. Если это время более 100 мс, нужно добавить в Spork.prefork блок подгрузку этого файла. То есть, на данном примере стоит добавить: | |
require 'treetop/runtime' | |
require 'mail' | |
И у нас получится СУПЕР-МЕГА-СКОРОСТНОЙ запуск тестов, и отключаем трейс блок в prefork. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# encoding: utf-8 | |
require 'cucumber/rails' | |
require 'spork' | |
ActionController::Base.allow_rescue = false | |
Spork.prefork do | |
# Раскомментировать это если нужно запустить трейсер, который показывает в милисекундах | |
# какие подгружаются файлы. Необходимо включить в require блок те файлы, которые загружаются | |
# более 100 мс. | |
# module Kernel | |
# def require_with_trace(*args) | |
# start = Time.now.to_f | |
# @indent ||= 0 | |
# @indent += 2 | |
# require_without_trace(*args) | |
# @indent -= 2 | |
# Kernel::puts "#{' '*@indent}#{((Time.now.to_f - start)*1000).to_i} #{args[0]}" | |
# end | |
# alias_method_chain :require, :trace | |
# end | |
ENV["RAILS_ENV"] ||= "test" | |
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment') | |
require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support | |
require 'cucumber/rails/world' | |
# require 'cucumber/rails/active_record' | |
require 'cucumber/web/tableish' | |
require 'capybara/rails' | |
require 'capybara/cucumber' | |
require 'capybara/session' | |
require 'mime/types' | |
# Lets you click links with onclick javascript handlers without using @culerity or @javascript | |
# Commented out because it causes bugs :-\ | |
#require 'cucumber/rails/capybara_javascript_emulation' | |
Capybara.default_selector = :css | |
end | |
Spork.each_run do | |
ActionController::Base.allow_rescue = false | |
Cucumber::Rails::World.use_transactional_fixtures = true | |
if defined?(ActiveRecord::Base) | |
begin | |
require 'database_cleaner' | |
DatabaseCleaner.strategy = :truncation | |
rescue LoadError => ignore_if_database_cleaner_not_present | |
end | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
... | |
group :development do | |
gem "cucumber-rails" | |
gem "capybara" | |
gem "rspec-rails", ">= 2.0.1" | |
end | |
group :test do | |
gem "cucumber-rails" | |
gem "capybara" | |
gem "rspec-rails", ">= 2.0.1" | |
gem "database_cleaner" | |
# Особое внимание на версию Spork | |
gem "spork", ">= 0.9.0.rc9" | |
end | |
... |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'spork' | |
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' | |
require 'database_cleaner' | |
#require 'remarkable/active_record' | |
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} | |
RSpec.configure do |config| | |
config.mock_with :rspec | |
config.before :suite do | |
DatabaseCleaner.strategy = :transaction | |
DatabaseCleaner.clean_with :truncation | |
end | |
config.before :each do | |
DatabaseCleaner.start | |
end | |
config.after :each do | |
DatabaseCleaner.clean | |
end | |
end | |
end | |
Spork.each_run do | |
# This code will be run each time you run your specs. | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment