【问题标题】:Database calls shown in rails test suiteRails 测试套件中显示的数据库调用
【发布时间】:2013-10-05 23:40:16
【问题描述】:

我的测试套件由guard、rspec、spork 和capybara 组成。我对 TDD 很陌生,但在学习它之前,我会不断地看到由服务器输出中的 rails 生成的数据库查询(使用瘦)。这很有用,因为我可以立即看到何时需要进一步优化查询。

我想知道是否可以使用上述工具的任何 gem 来实现这种行为,或者是否有另一个 gem 可以在我的测试中使用来输出类似的信息。

我在测试套件中使用的主要 gem 如下:

group :development, :test do
  gem 'rspec-rails'
  gem 'guard-rspec'
  gem 'spork-rails'
  gem 'guard-spork'
end

group :test do
  gem 'capybara'
  gem 'selenium-webdriver', "~> 2.35.1"
end

【问题讨论】:

    标签: ruby-on-rails testing rspec capybara


    【解决方案1】:

    您可以检查生成的数据库查询的测试日志:

    $ tail -f log/test.log
    

    它显示所有已执行的查询 + 一些用于设置测试数据库的插入和回滚语句。

    【讨论】:

    • 我怀疑查询默认是关闭的。问题是记录原始数据库查询是不安全的(在生产中,obv),所以现代 Rails 关闭了所有数据库查询记录。
    • @Philp 我刚刚测试了我最新的应用程序。如上所述,它在测试环境中对我有用,我不记得做过任何记录器调整。
    • 这确实有效,但是我将如何使用警卫将其自动化,以便将其作为测试的一部分输出。可能是可选的?我会继续搞砸,看看我能想出什么
    • 您通常在单独的控制台窗口中跟踪测试日志。这是一个与 rspec 中运行的测试不同的 bash 进程。可能有一种方法可以将日志语句拉入测试结果屏幕,但结果可能是屏幕上出现大量信息。报告您的发现!
    • 会的,我需要一段时间才能真正尝试自动化它,但目前这可以很好地解决问题,谢谢
    【解决方案2】:

    这是一个常见问题解答;在您的环境/test.rb 文件中尝试ActiveRecord::Base.logger.level = Logger::DEBUG。

    接下来,要学习 Rails 和 TDD,不要使用 Capybara。坚持使用 RSpec。我应该说要坚持正常的测试用例,但是 RSpec 已经占据了这个空间,所以你会发现很多在线支持。

    Capybara 用于测试高级和端到端的东西。您只需要 TDD 说明您的数据库包含某某,并且您生成的网页包含某某,所以坚持下去。

    【讨论】:

    • 抱歉延迟响应,这不起作用,它为 nil:NilClass (NoMethodError) 提供未定义的方法 `level=',如果需要,有完整的堆栈跟踪。
    猜你喜欢
    • 2012-06-28
    • 2020-03-27
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 2011-10-02
    相关资源
    最近更新 更多