Rspec用于测试Rails应用的选项

5

运行测试时,我会得到数据库事务的所有输出信息:

lee$ rspec spec/mailers/
Connecting to database specified by database.yml
   (0.1ms)  BEGIN
  User Exists (0.7ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = 'user@example.name' LIMIT 1
  User Exists (0.4ms)  SELECT 1 AS one FROM "users" WHERE "users"."auth_token" = '8bF72xsaxsSsidLvA1uD9Q' LIMIT 1
  SQL (2.3ms)  INSERT INTO "users" ("auth_token", "created_at", "email", "first_name", "last_name", "password_digest", "password_reset_token", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING "id"  [["auth_token", "8bF70xsaEsSsidLvA1uD9Q"], ["created_at", Fri, 21 Dec 2012 14:55:40 UTC +00:00], ["email", "michale@swift.name"], ["first_name", nil], ["last_name", nil], ["password_digest", "$2a$10$KXKLprkU/Irp30LoB8M.DuSwLV9bq9P3C7hIAO4yNShPrDE.NmHU."], ["password_reset_token", nil], ["updated_at", Fri, 21 Dec 2012 14:55:40 UTC +00:00]]
   (1.6ms)  COMMIT
  Rendered user_mailer/customer_sigup_confirmation.html.erb (0.8ms)
  Rendered user_mailer/customer_sigup_confirmation.text.erb (0.4ms)
.

Finished in 0.41419 seconds
1 example, 0 failures

Randomized with seed 6071

这是太多的噪音!我该如何禁用/减少它?

如果有帮助,以下是我的spec_helper。

require 'rubygems'
require 'spork'
#uncomment the following line to use spork with the debugger
# require 'spork/ext/ruby-debug'

Spork.prefork do
  # Loading more in this block will cause your tests to run faster. However,
  # if you change any configuration or code from libraries loaded here, you'll
  # need to restart spork for it take effect.

  # This file is copied to spec/ when you run 'rails generate rspec:install'
  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'
  require 'rspec/autorun'
  require 'capybara/rspec'
  require 'capybara/poltergeist'

  Capybara.javascript_driver = :poltergeist

  # Requires supporting ruby files with custom matchers and macros, etc,
  # in spec/support/ and its subdirectories.
  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

  RSpec.configure do |config|
    # ## Mock Framework
    #
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
    #
    # config.mock_with :mocha
    # config.mock_with :flexmock
    # config.mock_with :rr

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

    # If you're not using ActiveRecord, or you'd prefer not to run each of your
    # examples within a transaction, remove the following line or assign false
    # instead of true.
    config.use_transactional_fixtures = true

    # If true, the base class of anonymous controllers will be inferred
    # automatically. This will be the default behavior in future versions of
    # rspec-rails.
    config.infer_base_class_for_anonymous_controllers = false

    # Run specs in random order to surface order dependencies. If you find an
    # order dependency and want to debug it, you can fix the order by providing
    # the seed, which is printed after each run.
    #     --seed 1234
    config.order = "random"


    # Include Factory Girl syntax to simplify calls to factories
    config.include FactoryGirl::Syntax::Methods

    # Add Support Modules
    # config.include LoginMacros
    config.include MailerMacros
    config.before(:each) { reset_email }

    config.treat_symbols_as_metadata_keys_with_true_values = true
    config.filter_run :focus => true
    config.run_all_when_everything_filtered = true

  end

end

Spork.each_run do
  # This code will be run each time you run your specs.
  FactoryGirl.reload

  class ActiveRecord::Base
    mattr_accessor :shared_connection
    @@shared_connection = nil

    def self.connection
      @@shared_connection || retrieve_connection
    end
  end

  # Forces all threads to share the same connection. This works on
  # Capybara because it starts the web server in a thread.
  ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection

end
2个回答

2
在测试环境初始化器中(config/environments/test.rb),配置适当的日志记录器级别: config.logger.level = Logger::FATAL

1
问题的一部分可能源于将 Poltergeist 用作 Capybara 的 JavaScript 驱动程序。当我使用 capybara-webkit 时,也遇到了类似的问题。尝试使用以下语法:
Capybara.register_driver :poltergeist_silent do |app|
  Capybara::Poltergeist::Driver.new(app, :logger => nil)
end
Capybara.javascript_driver = :poltergeist_silent

这段代码应该放在你的spec_helper中,替换这一行:Capybara.javascript_driver = :poltergeist。这有可能会防止渲染带来的日志消息。
我感觉关于数据库的消息可能是由Spork引起的,因为在没有Spork的情况下我已经广泛地使用了Rspec而且并没有看到那些消息。你能不能尝试检查一下是否有一个选项可以让Spork禁用日志/标准输出消息?

谢谢Batkins,但还是一样。是的,在检查之前我已经重新启动了应用程序。我会更深入地研究spork或poltergeist。 - Lee
尝试这行代码:Capybara::Poltergeist::Driver.new(app, :stdout => nil)。这是我的最终建议,因为这是 capybara-webkit 的语法(看起来应该是 :logger 而不是 :stdout 用于 poltergeist,但也许我是错误的)。 - Batkins
哎呀,还是没有改变。我会继续挖掘的。谢谢。 - Lee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接