RSpec - общая база данных & транзакционные светильники не работают - PullRequest
2 голосов
/ 20 марта 2012

Я пытался следовать совету Хосе Валима по более быстрым тестам , но безрезультатно.Я использую 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, сохранять как можно меньше зависимостей и избегать снижения скорости в наборе тестов.

Любая помощь / информация / указатели очень ценятся!

Соответствующая информация:

  • Рельсы 3.2.2
  • RSpec 2.9.0
  • Капибара 1.1.2
  • Капибара-webkit 0.11.0
  • FactoryGirl 2.6.4
  • Spork 0.9.0
  • Guard 1.0.1
  • Guard-spork 0.5.2

  • на Macbook Air, OS X 10.7.3 (если это актуально)

И мой помощник по спецификациям:

# 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

1 Ответ

1 голос
/ 03 апреля 2012

После долгих исследований проблема, похоже, связана со спецификациями, использующими JS в целом, а не с патчем AR monkey.

Я перефразировал проблему в новом вопросе: Спецификации запроса RSpec + Capybara без JS

...