Я пытался следовать совету Хосе Валима по более быстрым тестам , но безрезультатно.Я использую Spork и помещаю патч AR monkey в блок Spork.each_run
(см. Помощник спецификаций ниже).
Однако мои спецификации запросов не выполняются, потому что база данных не очищается между запусками - в частности, я получаю такие ошибкикак expected 1 record, got X
при выполнении утверждений типа Model.should have(1).record
.
Обновление Проблема заключается в спецификации запроса, использующей Javascript.См. Следующую спецификацию - она не работает, когда я использую js: true
, но не, если я удаляю это (я использую RSpec config.treat_symbols_as_metadata_keys_with_true_values = true
, fwiw.)
# encoding: UTF-8
require 'spec_helper'
feature "Create a shift", :js do
scenario %q(
In order to plan the workload
As a coordinator
I want to schedule shifts
And I want to see when they're scheduled for
) do
visit shifts_path
click_link "new_shift_#{Date.current}"
fill_in 'shift_note', with: 'Casper - luk'
click_link_or_button 'submit'
Shift.should have(1).record
Shift.last.begins_at.should == Date.current
page.should have_selector("ol[data-date=\"#{Date.current}\"] li#shift_#{Shift.last.id}")
end
end
Я могу сказать, что это связано с тем, что БД неочищено, потому что в первый раз происходит сбой (expected 1 record, got 0
), второй раз проходит (поскольку в БД 1 запись), а затем снова происходит сбой при любых последующих запусках (expected 1 record, got 2
и т. д.)
Я стараюсь избегать использования такого драгоценного камня, как DatabaseCleaner, сохранять как можно меньше зависимостей и избегать снижения скорости в наборе тестов.
Любая помощь / информация / указатели очень ценятся!
Соответствующая информация:
И мой помощник по спецификациям:
# encoding: UTF-8
require 'rubygems'
require 'spork'
Spork.prefork do
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'capybara/rspec'
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
RSpec.configure do |config|
config.mock_with :rspec
config.use_transactional_fixtures = true
config.treat_symbols_as_metadata_keys_with_true_values = true
config.infer_base_class_for_anonymous_controllers = false
config.include Factory::Syntax::Methods
Capybara.javascript_driver = :webkit
Rails.logger.level = 4 # speed - http://blog.plataformatec.com.br/tag/capybara/
end
end
Spork.each_run do
require 'factory_girl_rails'
class ActiveRecord::Base
mattr_accessor :shared_connection
@@shared_connection = nil
def self.connection
@@shared_connection || retrieve_connection
end
end
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
end