2012-02-11 93 views
1

我有这个测试的一个问题:RSpec的+的Javascript = BusyException:不能ROLLBACK TRANSACTION

require File.dirname(__FILE__) + '/../spec_helper' 

describe "registration feature", :js => true do 
    it "sign up user" do 
    @user = Factory.create(:user) 
    visit login_path 
    puts page.html 
    end 
end 

它显示消息:的SQLite3 :: BusyException:无法回滚事务 - 正在进行的SQL语句:ROLLBACK TRANSACTION

我试过很多想:

  • 当我删除 “:JS =>真正的” 它的工作原理。
  • 当我尝试使用硒或webkit它不起作用。
  • 我试图删除数据库或重新启动我的电脑,它不起作用。
  • 我试着用mysql,它的工作原理。

这是我spec_helper:

require 'rubygems' 
require 'spork' 

Spork.prefork do 
    ENV["RAILS_ENV"] ||= 'test' 
    require File.expand_path("../../config/environment", __FILE__) 
    require 'rspec/rails' 
    require 'rspec/autorun' 
    require 'capybara/rspec' 
    require "email_spec" 
    require 'simplecov' 
    require "authlogic/test_case" 
    SimpleCov.start 'rails' 
    Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

    RSpec.configure do |config| 
    config.mock_with :mocha 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 
    config.use_transactional_fixtures = true 
    config.infer_base_class_for_anonymous_controllers = false 

    config.include(EmailSpec::Helpers) 
    config.include(EmailSpec::Matchers) 
    end 

    include Authlogic::TestCase 

    require 'database_cleaner' 
    DatabaseCleaner.strategy = :truncation 

    Capybara.javascript_driver = :webkit 
    Capybara.default_selector = :css 
end 

Spork.each_run do 
    DatabaseCleaner.clean 
    load "#{Rails.root}/config/routes.rb" 
    Dir["#{Rails.root}/lib/**/*.rb"].each { |f| load f } 
    Dir["#{Rails.root}/app/**/*.rb"].each { |f| load f } 
    I18n.backend.load_translations 
end 

这是我test.rb:

Onopia::Application.configure do 
    config.cache_classes = true 
    config.serve_static_assets = true 
    config.static_cache_control = "public, max-age=3600" 
    config.whiny_nils = true 
    config.consider_all_requests_local  = true 
    config.action_controller.perform_caching = false 
    config.action_dispatch.show_exceptions = false 
    config.action_controller.allow_forgery_protection = false 
    config.action_mailer.delivery_method = :test 
    config.active_support.deprecation = :stderr 
    config.active_record.mass_assignment_sanitizer = :strict 
end 

我真的不知道该怎么办。你可以帮我吗?非常感谢!

回答

3

我找到了解决方案。我加上这个:

self.use_transactional_fixtures = false 

之后描述。

0

这里是一个更好的解决方案:

require 'rubygems' 
require 'spork' 

Spork.prefork do 
    ENV["RAILS_ENV"] ||= 'test' 
    require File.expand_path("../../config/environment", __FILE__) 
    require 'rspec/rails' 
    require 'rspec/autorun' 
    require 'capybara/rspec' 
    require "email_spec" 
    require 'simplecov' 
    require "authlogic/test_case" 
    require 'database_cleaner' 

    SimpleCov.start 'rails' 
    Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

    RSpec.configure do |config| 
    config.mock_with :mocha 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 
    config.use_transactional_fixtures = true 
    config.infer_base_class_for_anonymous_controllers = false 

    config.before(:suite, :type => :request) do 
     config.use_transactional_fixtures = false 
     DatabaseCleaner.strategy = :truncation 
    end 

    config.before(:each, :type => :request) do 
     DatabaseCleaner.start 
    end 

    config.after(:each, :type => :request) do 
     DatabaseCleaner.clean 
    end 

    config.include(EmailSpec::Helpers) 
    config.include(EmailSpec::Matchers) 
    end 

    include Authlogic::TestCase 

    Capybara.javascript_driver = :webkit 
    Capybara.default_selector = :css 
end 

Spork.each_run do 
    load "#{Rails.root}/config/routes.rb" 
    Dir["#{Rails.root}/lib/**/*.rb"].each { |f| load f } 
    Dir["#{Rails.root}/app/**/*.rb"].each { |f| load f } 
    I18n.backend.load_translations 
end 
相关问题