2015-03-08 2 views
0

Настройка use_transactional_fixtures = false в моем файле spec_helper.rb, хотя, когда я смотрю на вывод моего тестового журнала, кажется, что транзакция все еще используется? Почему это так и как я удаляю транзакцию?RSpec use_transactional_fixtures = false not working

rails_helper.rb ...

# This file is copied to spec/ when you run 'rails generate rspec:install' 
ENV["RAILS_ENV"] ||= 'test' 
require 'spec_helper' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
# Add additional requires below this line. Rails is not loaded until this point! 

ActiveRecord::Migration.maintain_test_schema! 

RSpec.configure do |config| 
    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    config.use_transactional_fixtures = false 
    config.infer_spec_type_from_file_location! 

    config.include FactoryGirl::Syntax::Methods 
end 

spec_helper.rb ...

require 'devise' 
require "paperclip/matchers" 
require 'simplecov' 
require 'database_cleaner' 
require 'capybara/rspec' 

SimpleCov.start 'rails' 

module SphinxHelpers 
    def index 
    ThinkingSphinx::Test.index 
    # Wait for Sphinx to finish loading in the new index files. 
    sleep 0.25 until index_finished? 
    end 

    def index_finished? 
    Dir[Rails.root.join(ThinkingSphinx::Test.config.indices_location, '*.{new,tmp}*')].empty? 
    end 
end 

RSpec.configure do |config| 

    config.include SphinxHelpers 

    config.before(:suite) do 
    # Ensure sphinx directories exist for the test environment 
    ThinkingSphinx::Test.init 
    # Configure and start Sphinx, and automatically 
    # stop Sphinx at the end of the test suite. 
    ThinkingSphinx::Test.start_with_autostop 
    end 

    config.before(:each) do |example| 
    index 
    end 

    config.include Paperclip::Shoulda::Matchers 
    config.include Devise::TestHelpers, :type => :controller 
    config.raise_errors_for_deprecations! 

    config.before(:suite) do 
    DatabaseCleaner.strategy = :transaction 
    DatabaseCleaner.clean_with(:truncation) 
    end 

    config.around(:each) do |example| 
    DatabaseCleaner.cleaning do 
     example.run 
    end 
    end 

    config.expect_with :rspec do |expectations| 
    expectations.include_chain_clauses_in_custom_matcher_descriptions = true 
    end 

    config.mock_with :rspec do |mocks| 
    mocks.verify_partial_doubles = true 
    end 
end 

RSpec::Matchers.define :accept_nested_attributes_for do |association| 
    match do |model| 
    @model = model 
    @nested_att_present = model.respond_to?("#{association}_attributes=".to_sym) 
    if @nested_att_present && @reject 
     model.send("#{association}_attributes=".to_sym,[@reject]) 
     @reject_success = model.send("#{association}").empty? 
    end 
    if @nested_att_present && @accept 
     model.send("#{association}_attributes=".to_sym,[@accept]) 
     @accept_success = ! (model.send("#{association}").empty?) 
    end 
    @nested_att_present && (@reject.nil? || @reject_success) && (@accept.nil? || @accept_success) 
    end 

    failure_message_for_should do 
    messages = [] 
    messages << "expected #{@model.class} to accept nested attributes for #{association}" unless @nested_att_present 
    messages << "expected #{@model.class} to reject values #{@reject.inspect} for association #{association}" unless @reject_success 
    messages << "expected #{@model.class} to accept values #{@accept.inspect} for association #{association}" unless @accept_success 
    messages.join(", ") 
    end 

    description do 
    desc = "accept nested attributes for #{expected}" 
    if @reject 
     desc << ", but reject if attributes are #{@reject.inspect}" 
    end 
    end 

    chain :but_reject do |reject| 
    @reject = reject 
    end 

    chain :and_accept do |accept| 
    @accept = accept 
    end 
end 

спецификацию, которая отображает проблему ....

require 'rails_helper' 

RSpec.describe "The homepage", :type => :feature do 
    it "displays articles" do  
    article = create(:article) 
    visit "/" 
    assert page.has_css?(".article") 
    end 
end 

журнал испытаний вывода при запуске спецификации (обратите внимание на транзакцию) ...

(0.2ms) ALTER TABLE "annotations" DISABLE TRIGGER ALL;ALTER TABLE "categories" DISABLE TRIGGER ALL;ALTER TABLE "schema_migrations" DISABLE TRIGGER ALL;ALTER TABLE "articles" DISABLE TRIGGER ALL;ALTER TABLE "comments" DISABLE TRIGGER ALL;ALTER TABLE "contents" DISABLE TRIGGER ALL;ALTER TABLE "galleries" DISABLE TRIGGER ALL;ALTER TABLE "gallery_images" DISABLE TRIGGER ALL;ALTER TABLE "users" DISABLE TRIGGER ALL 
(13.5ms) TRUNCATE TABLE "annotations", "categories", "articles", "comments", "contents", "galleries", "gallery_images", "users" RESTART IDENTITY CASCADE; 
(0.7ms) ALTER TABLE "annotations" ENABLE TRIGGER ALL;ALTER TABLE "categories" ENABLE TRIGGER ALL;ALTER TABLE "schema_migrations" ENABLE TRIGGER ALL;ALTER TABLE "articles" ENABLE TRIGGER ALL;ALTER TABLE "comments" ENABLE TRIGGER ALL;ALTER TABLE "contents" ENABLE TRIGGER ALL;ALTER TABLE "galleries" ENABLE TRIGGER ALL;ALTER TABLE "gallery_images" ENABLE TRIGGER ALL;ALTER TABLE "users" ENABLE TRIGGER ALL 
ActiveRecord::SchemaMigration Load (0.3ms) SELECT "schema_migrations".* FROM "schema_migrations" 
(0.6ms) ALTER TABLE "annotations" DISABLE TRIGGER ALL;ALTER TABLE "categories" DISABLE TRIGGER ALL;ALTER TABLE "schema_migrations" DISABLE TRIGGER ALL;ALTER TABLE "articles" DISABLE TRIGGER ALL;ALTER TABLE "comments" DISABLE TRIGGER ALL;ALTER TABLE "contents" DISABLE TRIGGER ALL;ALTER TABLE "galleries" DISABLE TRIGGER ALL;ALTER TABLE "gallery_images" DISABLE TRIGGER ALL;ALTER TABLE "users" DISABLE TRIGGER ALL 
(1.0ms) select table_name from information_schema.views where table_schema = 'site_test' 
(23.8ms) TRUNCATE TABLE "annotations", "categories", "articles", "comments", "contents", "galleries", "gallery_images", "users" RESTART IDENTITY CASCADE; 
(0.7ms) ALTER TABLE "annotations" ENABLE TRIGGER ALL;ALTER TABLE "categories" ENABLE TRIGGER ALL;ALTER TABLE "schema_migrations" ENABLE TRIGGER ALL;ALTER TABLE "articles" ENABLE TRIGGER ALL;ALTER TABLE "comments" ENABLE TRIGGER ALL;ALTER TABLE "contents" ENABLE TRIGGER ALL;ALTER TABLE "galleries" ENABLE TRIGGER ALL;ALTER TABLE "gallery_images" ENABLE TRIGGER ALL;ALTER TABLE "users" ENABLE TRIGGER ALL 
(0.1ms) BEGIN 
(0.1ms) COMMIT 
(0.1ms) BEGIN 
(0.1ms) SAVEPOINT active_record_1 
User Exists (0.5ms) SELECT 1 AS one FROM "users" WHERE "users"."username" = 'testuser' LIMIT 1 
User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1 
User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1 
SQL (0.7ms) INSERT INTO "users" ("created_at", "email", "encrypted_password", "updated_at", "username") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["created_at", "2015-03-08 20:48:58.017027"], ["email", "[email protected]"], ["encrypted_password", "$2a$04$vHQdcMEuRC2mdrNebemS5e9zMOUaloIhcIBEHlu6z7ms8Rh2NJ0F."], ["updated_at", "2015-03-08 20:48:58.017027"], ["username", "testuser"]] 
(0.2ms) RELEASE SAVEPOINT active_record_1 
Command :: file -b --mime '/var/folders/px/vlftvj1j43j7369cy2_sz_j40000gn/T/aacb8db341826e828273a80db5d60d5220150308-5197-hsarwm.png' 
Command :: identify -format '%wx%h,%[exif:orientation]' '/var/folders/px/vlftvj1j43j7369cy2_sz_j40000gn/T/aacb8db341826e828273a80db5d60d5220150308-5197-hlhno1.png[0]' 2>/dev/null 
Command :: identify -format %m '/var/folders/px/vlftvj1j43j7369cy2_sz_j40000gn/T/aacb8db341826e828273a80db5d60d5220150308-5197-hlhno1.png[0]' 
Command :: convert '/var/folders/px/vlftvj1j43j7369cy2_sz_j40000gn/T/aacb8db341826e828273a80db5d60d5220150308-5197-hlhno1.png[0]' -auto-orient -resize "100%" '/var/folders/px/vlftvj1j43j7369cy2_sz_j40000gn/T/aacb8db341826e828273a80db5d60d5220150308-5197-hlhno120150308-5197-1j86yzw' 
Command :: file -b --mime '/var/folders/px/vlftvj1j43j7369cy2_sz_j40000gn/T/aacb8db341826e828273a80db5d60d5220150308-5197-hlhno120150308-5197-1j86yzw' 
(0.1ms) SAVEPOINT active_record_1 
Command :: file -b --mime '/var/folders/px/vlftvj1j43j7369cy2_sz_j40000gn/T/aacb8db341826e828273a80db5d60d5220150308-5197-h4xfii.png' 
Article Exists (0.5ms) SELECT 1 AS one FROM "articles" WHERE "articles"."title" = 'Article Title' LIMIT 1 
SQL (6.4ms) INSERT INTO "articles" ("body", "created_at", "description", "header_one", "header_two", "photo_content_type", "photo_file_name", "photo_file_size", "photo_updated_at", "posted_at", "title", "updated_at", "url", "user_id") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) RETURNING "id" [["body", "This is the article body."], ["created_at", "2015-03-08 20:48:58.218394"], ["description", "This is a test article!"], ["header_one", "Article Header One"], ["header_two", "Article Header Two"], ["photo_content_type", "image/png"], ["photo_file_name", "test_image.png"], ["photo_file_size", 96884], ["photo_updated_at", "2015-03-08 20:48:58.036313"], ["posted_at", "2015-03-08 20:48:51.398651"], ["title", "Article Title"], ["updated_at", "2015-03-08 20:48:58.218394"], ["url", "http://www.testurl.com"], ["user_id", 1]] 
(0.2ms) RELEASE SAVEPOINT active_record_1 
Started GET "/" for 127.0.0.1 at 2015-03-08 16:48:58 -0400 
Processing by SiteController#index as HTML 
Sphinx Query (9.3ms) SELECT * FROM `article_core` WHERE `sphinx_deleted` = 0 ORDER BY `created_at` DESC LIMIT 0, 5 
Sphinx Found 0 results 
Rendered articles/_pagination.html.erb (0.7ms) 
Rendered articles/_list.html.erb (13.0ms) 
Category Load (0.3ms) SELECT "categories".* FROM "categories" 
Rendered site/homepage/_filters.html.erb (1.3ms) 
Rendered site/homepage/_search.html.erb (57.1ms) 
Rendered site/homepage/_twitter.html.erb (0.5ms) 
Rendered site/homepage/_sidebar.html.erb (61.2ms) 
Rendered site/index.html.erb within layouts/application (76.3ms) 
Rendered site/_head.html.erb (19.8ms) 
Rendered site/homepage/_social_media.html.erb (0.5ms) 
Rendered site/homepage/_social_media.html.erb (0.1ms) 
Rendered site/homepage/_social_media.html.erb (0.1ms) 
Rendered site/homepage/_social_media.html.erb (0.1ms) 
Rendered site/homepage/_menu.html.erb (8.0ms) 
Content Load (0.4ms) SELECT "contents".* FROM "contents" WHERE "contents"."name_slug" = 'footer_left' ORDER BY "contents"."id" ASC LIMIT 1 
Content Load (0.3ms) SELECT "contents".* FROM "contents" WHERE "contents"."name_slug" = 'footer_middle' ORDER BY "contents"."id" ASC LIMIT 1 
Rendered site/_footer.html.erb (8.6ms) 
Rendered site/_ga.html.erb (0.4ms) 
Completed 200 OK in 128ms (Views: 116.4ms | ActiveRecord: 2.2ms) 
(0.2ms) ROLLBACK 

ответ

0

Когда вы устанавливаете config.use_transactional_fixtures = false, вы говорите RSpec, чтобы не беспокоиться о чистке базы данных каждый раз, когда она запускает новый пример. Иногда я устанавливаю значение false, потому что вместо этого я использую database_cleaner (GitHub).

Итак, на основе ваших журналов, я считаю, RSpec делает именно то, что он должен делать.

Вы можете прочитать об этой настройке в RSpec manual

Смежные вопросы