我试图关注José Valim's advice on faster test suites,但无济于事。
我使用Spork并将AR猴子补丁放在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的gem,以尽可能少地保持依赖关系,并避免测试套件中的速度降低。
非常感谢任何帮助/信息/指针!
相关信息:
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
答案 0 :(得分:1)
经过多次调查,问题似乎与使用JS一般的规格有关,而不是真正的AR猴子补丁。
我在这里的一个新问题中重新提出了这个问题:RSpec+Capybara request specs w/ JS not working